Tạo một hàm mã hóa password đơn giản

2010-04-13 00:16

 

Tạo một hàm mã hóa password đơn giản (Thứ Sáu, 19/03/2010-9:18 AM) Hướng dẫn tạo một hàm mã hóa đơn giản. 1. Một hàm mã hóa đơn giản : Nếu bạn nghĩ mã hóa là cái gì đó quá xa vời thì chúng tôi mong bạn nghĩ lại sau khi xem đoạn code này. Trước tiên chúng ta hãy giả định một khách hàng của bạn đặt password của anh ta là "123456". Bây giờ bạn hãy mã hóa nó : pass = "123456" pass = Replace (pass , "1" , "UVK" ) pass = Replace (pass , "2" , "ABK" ) pass = Replace (pass , "3" , "MPT" ) pass = Replace (pass , "4" , "AIJ" ) pass = Replace (pass , "5" , "TUV" ) pass = Replace (pass , "6" , "KMP" ) Response.Write pass Bạn có tưởng tượng được password của anh chàng kia sẽ thành ra thế nào không ? UVKABKMPTAIJTUVKMP Như vậy, chỉ với một hàm mã hóa có cú pháp đơn giản, bạn đã đảm bảo được sự an toàn cho password của bạn. Chắc bạn cũng không tưởng tượng được việc một hacker may mắn lấy được CSDL của bạn và đọc được UVKABKMPTAIJTUVKMP thay vì 123456. Ở ví dụ trên: Dòng đầu chúng tôi khai báo giá trị cho biến pass. Các dòng còn lại - trừ dòng cuối -tôi liên tục dùng hàm Replace() để thay thế các kí tự "1" , "2" ,"3" , .... bằng một bộ 3 kí tự chữ. Điều này sẽ biến các kí tự đơn giản từ "1" đến "6" thành những kí tự khó hiểu. Mà ghép tất cả lại thì càng khó hiểu hơn. 2. Giải mã hàm mã hóa của bạn. Đã mã hóa thì phải giải mã, đó là điều đương nhiên. Trong trường hợp khách hàng của bạn nhập password chưa mã hóa thì bạn sẽ làm thế nào để kiểm tra? Có 2 cách để giải quyết! 1. Mã hóa nó và so sánh nó với chuỗi lưu trong CSDL 2. Giải mã password trong CSDL và so sánh vơi pass chưa mã hóa. Trong bài viết này, chúng tôi sẽ giúp các bạn viết một hàm giải mã cho hàm mã hóa trên. Code: 1. pass = "UVKABKMPTAIJTUVKMP" 2. pass_giai_ma = "" 3. For i = 1 to len (pass) Step 3 4. nhom_ki_tu = Mid ( pass , i , 3) 5. nhom_ki_tu = Replace (nhom_ki_tu , "UVK", "1") 6. nhom_ki_tu = Replace (nhom_ki_tu , "ABK" ,"2") 7. nhom_ki_tu = Replace (nhom_ki_tu , "MPT", "3") 8. nhom_ki_tu = Replace (nhom_ki_tu, "AIJ" , "4") 9 nhom_ki_tu = Replace (nhom_ki_tu, "TUV", "5" ) 10. nhom_ki_tu = Replace (nhom_ki_tu, "KMP", "6" ) 11. pass_giai_ma = pass_giai_ma & nhom_ki_tu 12. Next 13. Response.Write pass_giai_ma Khi bạn chạy đoạn code trên bạn sẽ nhận được password ban đầu : "123456". Có lẽ bạn nghĩ chỉ cần dùng hàm Replace() trên toàn bộ chuỗi pass , như thế này : 1 pass = "UVKABKMPTAIJTUVKMP" 2 pass = Replace (pass , "UVK", "1") 3 pass = Replace (pass , "ABK" ,"2") 4 pass = Replace (pass , "MPT", "3") 5 pass = Replace (pass, "AIJ" , "4") 6 pass = Replace (pass, "TUV", "5" ) 7 pass = Replace (pass, "KMP", "6" ) 8 Response.Write pass Nhưng bạn hãy xem xét một cách tỉnh táo hơn : sau khi chạy đoạn code này thì password được giải mã của bạn sẽ là : 1234T1MP Bạn không biết tại sao lại như thế ư? Hãy để ý chuỗi password đã mã hóa của bạn : "UVKABKMPTAIJTUVKMP" Khi bạn chạy dòng lệnh thứ 2 , thay thế các nhóm "UVK" bằng kí tự "1" thì bạn đã thay thế luôn 2 nhóm UVK. Nhưng rõ ràng là khi mã hóa chỉ có 1 kí tự "1" , tại sao lại có 2 nhóm UVK? Xin trả lời, lỗi ở chỗ 2 nhóm kí tự TUV(5) và KMP(6) đứng cạnh nhau đã vô tình ghép thành UVK. Đó là lý do tại sao code của chúng tôi lại trở nên phức tạp như vậy. Bây giờ hãy trở lại đoạn code giải mã phía trên: Ở trên, chúng tôi có dùng 1 vòng lặp, nhưng không duyệt qua toàn bộ các kí tự của chuỗi pass mà chỉ duyệt nhảy cóc 3 kí tự 1 lượt. Làm thế nào để duyệt qua 3 kí tự 1 lượt ? Mấu chốt ở dòng số 3 khi tôi dùng 1 vòng lặp For - Next với từ khóa Step. "Step 3" không phải là khi lặp nhảy qua số 3 mà có nghĩa các bước nhảy có độ dài là 3. Biến i sẽ có các giá trị khi lặp là : 1,4,7,10,13,16. Đó là những vị trí bắt đầu của các bộ 3 kí tự dùng để mã hóa. Mấu chốt tiếp theo nằm ở dòng số 4 : tôi sử dụng hàm Mid () để cắt ra 3 kí tự bắt đầu từ vị trí thứ i đến vị trí i+3 , sau đó gán vào biến có tên : nhom_ki_tu . Ghi chú : Hàm Mid ( chuỗi , vị trí , số ký tự ) chuỗi : là chuỗi gốc mà bạn định trích từ đó ra 1 số kí tự vị trí : là 1 con số chỉ vị trí bắt đầu chỗ bạn muốn cắt. số ký tự : là số ký tự bạn muốn cắt, bắt đầu từ vị trí trên Bạn chú ý giá trị của vị trí và số ký tự phải là số nguyên lớn hơn 0. Nếu điền sai thì bạn sẽ nhận được lỗi Invalid procedure call or argument: 'Mid'. Sau dòng số 4, tôi đã chắc chắn cắt ra được từng bộ 3 kí tự mã hóa một, lúc này tôi mới tiến hành thay thế bằng hàm Replace. Đoạn code còn lại không có gì khó hiểu.

Hotline: 010-8332-3883 - Phòng kinh doanh: ; Đức Thịnh: ; Tư vấn : - Hotline: 010-8332-3883

 

Số khách đang online :