01/10/2018, 16:11

Mã hóa và giải mã một chuỗi trong mô hình 3 layers

Chào mọi người, em đang làm đồ án có liên quan tới mã hóa mà có phần không hiểu mong mọi người chỉ dẫn cho. Vd em có một bảng Account lưu các acc của user, khi em đăng ký một acc mới thì nó sẽ mã hóa password của mình rồi ghi xuống csdl, khi mình login thì nó sẽ lấy cái pass đó lên giải mã rồi mới so sánh với pass mình nhập từ bàn phím vào phải không ạ? Bài này nếu em làm mô hình 3 layers thì phần giải mã nên viết ở lớp nào ạ? Em cám ơn mọị người nhiều.

Tao Không Ngu. viết 18:25 ngày 01/10/2018

Hi Province.
Mình không rõ đồ án của bạn nhưng thường thì người ta sẽ thêm muối rồi băm cái pass với mộ số cái khác ra thành chuỗi băm. Sau đó khi login thì bạn cũng băm cái họ nhập vào tương tự để kiểm tra xem có khớp không.

P/S Quy tắc là người cung cấp dịch vụ không được biết mật khẩu người dùng.

Zhang Jike viết 18:14 ngày 01/10/2018

Ngược lại bạn ạ. Thường họ sẽ mã hoá một chiều. Ưu xuống db. Sau đó khi login mình sẽ hash lại password đo r compare với đoạn hash trên db. Như vậy thì khi có lấy đc password hash người dùng cũng k thể đăng nhập được

Trần Hoàn viết 18:12 ngày 01/10/2018

Việc lưu mật khẩu sử dụng “băm” (hash) là một phương pháp mã hoá một chiều. Đặc tính của hàm băm (hash function):

  1. Không thể dịch ngược một cách chính xác bản gốc từ bản mã.
  2. Có hiện tượng “xung đột” (colision), hai hoặc nhiều bản gốc có cùng một bản mã.

Nguyên tắc của việc lưu mật khẩu là quản trị viên (administrator, không phải người lập trình ra trang web) dù có biết được toàn bộ database cũng không biết được mật khẩu người dùng. Như vậy, một hàm băm có thể dùng để xác thực phải đảm bảo thêm 3 yếu tố:

  1. Tỉ lệ xung đột thấp
  2. Không thể suy luận ra một bản gốc từ một bản mã
  3. Thời gian để băm một bản gốc lớn (chống lại việc dò mật khẩu bruce force)

Khi đã có một hàm băm f thoả mãn 3 điều kiện trên và sử dụng để xác thực, quá trình lưu mật khẩu P vào CSDL thành D và xác thực được thực hiện như sau:
Lưu mật khẩu: D = f(P)
Xác thực mật khẩu do người dùng nhập (p):

Nếu f(p) == D thì xác thực thành công
nếu f(p) ≠ D thì thông báo sai mật khẩu

Việc xác thực bao gồm 3 bước:
Bước 1: tính f(p) đặt ở BLL hoặc GUI đều được. Nên đặt ở BLL chống hackers.
Bước 2: truy vấn f(p) và tên User (‘N’), CSDL trả về ‘D’. Thực hiện việc này ở DAL
Bước 3: so sánh f(p)D, thông báo ra GUI. Thực hiện việc này ở BLL

Bài liên quan
0