09/10/2018, 23:41

Thảo luận vấn đề mã hóa Mật Khẩu [PHP]

Dear cả nhà,

Hôm nay mình có một vài điều cần thảo luận chung với các coder php có kinh nghiệm và lẫn các chiến hữu mới ra nghề.

Hiện theo mình biết dạng mã hóa md5 đang phổ biến, như các diễn đàn chẳng hạn. Đơn cử như DDTH mình. Khi 1 new mem reg account, thì mật khẩu sẽ bị mã hóa thành 32 ký tự (VD:e389f3ec60a151c5a23f6e688f4bfa00). Và ai cũng biết ko dể gì dịch ngược loại này, cho dù có cả Dictionary sẵn hay các website chuyên dịch ngược (MD5 Cracker, Hash MD5...) như Gdata...v.v.v

Tuy nhiên trong một số trường hợp mình nhận thấy, có các coder tự viết code để mã hóa.
Ví du một mã nguồn web được share trên freecodevn, khi view database SQL mình nhìn thấy 1 Row được add vào 1 table như sau:

Code:
CREATE TABLE `user` (
  `userID` int(11) NOT NULL auto_increment,
  `firstname` varchar(160) NOT NULL default ',
  `lastname` varchar(160) NOT NULL default ',
  `username` varchar(160) NOT NULL default ',
  `email` varchar(160) NOT NULL default ',
  `password` varchar(30) NOT NULL default ',
.....
INSERT INTO `user` VALUES (1, 'Tran', 'Tuan', 'Tuan123456', 'email@gmail.com', 'aakcR08PK3l1o'...);
Như vậy username:Tuan123456 có pass ở đây đã được mã hóa thành aakcR08PK3l1o

Như vậy trong phần set mã khóa pass, coder đã thực hiện những dòng code có thể có như thế nào.Hay dùng 1 source code có sẵn nào mà bản thân Mình chưa được Học-Biết-Thấy. Và khả năng an toàn của pass đã mã hóa trên.

Bạn hãy thử 1 đoạn code để có kết quả mã hóa như trên. Và khả năng

Mình chúng ta cùng thảo luận trên tinh thần học hỏi, ko đâm chọt nhau.

Rất mong mọi người hưởng ứng.
vFork viết 01:47 ngày 10/10/2018
Quote Được gửi bởi NguaHang View Post
Code:
CREATE TABLE `user` (
  `userID` int(11) NOT NULL auto_increment,
  `firstname` varchar(160) NOT NULL default '',
  `lastname` varchar(160) NOT NULL default '',
  `username` varchar(160) NOT NULL default '',
  `email` varchar(160) NOT NULL default '',
  `password` varchar(30) NOT NULL default '',
.....
INSERT INTO `user` VALUES (1, 'Tran', 'Tuan', 'Tuan123456', 'email@gmail.com', 'aakcR08PK3l1o'...);
Như vậy username:Tuan123456 có pass ở đây đã được mã hóa thành aakcR08PK3l1o
Cái này phải là BackDoor không vậy ta .
conmalele viết 01:48 ngày 10/10/2018
http://dev.mysql.com/doc/refman/4.1/...ction_password

mysql> SELECT PASSWORD('badpwd');
-> '7f84554057dd964b'
TheHeTre viết 01:49 ngày 10/10/2018
Hiện tại mình thấy hàm MD5 là an toàn rồi. Với dân pro thì chú trọng thêm hash và băm trước khi truyền dữ liệu lên server nữa.

Khi người dùng tạo mật khẩu của họ, hãy khuyên chọn những mật khẩu có độ an toàn cao. Nhớ viết thêm vài hàm loại những mật khẩu có kiểu như toàn số, hoặc trùng với tên đăng nhập .vv.v.
tien bac viết 01:50 ngày 10/10/2018
Mình có thuật toán nho nhỏ, chả hiểu có đúng ko vì mình ko rành về mã hóa lắm

Đó là mình chuyển password Tuan123456 của bạn thành một char array được 1 array và convert từng char sang byte

T: 84
u: 117
a: 97
n: 110
1: 49
2: 50
3: 51
4: 52
5: 53
6: 54

sau đó mỗi số trên lần lượt nhân với 1 số tùy ý! Sau đó ghép tất cả lại 1 string mỗi số cách nhau 1 số để vì sau khi dịch ngược lại thì có thể ghép lại string ban đầu

Với password trên với basecrypt là 1987 thì có kết quả mã hóa sau:

166908|232479|192739|218570|97363|99350|101337|103 324|105311|107298

Bạn có thể lấy giá trị ASCII của từng char 1 và làm tương tự

Mình hồi trước thì dùng cái này của mình nhưng giờ thì hoàn toàn sài MD5 rồi!
Bài liên quan
0