MySQL中的密碼字段加密方式主要有兩種,分別是Old Password和New Password。這兩種方式都是使用hash算法對(duì)密碼進(jìn)行加密存儲(chǔ),但具體實(shí)現(xiàn)方式略有不同。
Old Password在早期版本的MySQL中,密碼采用Old Password方式進(jìn)行加密,其實(shí)現(xiàn)方式如下: 1. 將密碼字符串轉(zhuǎn)為一個(gè)unsigned char數(shù)組,并在末尾添加'\0'。 2. 以'\0'作為分隔符,將密碼字符串分成兩個(gè)部分:前半部分和后半部分。 3. 取出字符串前半部分,將其傳給crypt函數(shù),并以后半部分作為salt值。 4. 對(duì)于數(shù)據(jù)表中存儲(chǔ)的密碼,將其hash值與經(jīng)過(guò)上述步驟加密的密碼hash值進(jìn)行比較。 Old Password的加密方式存在安全漏洞,易于被破解。因此,MySQL在5.7版本以后不再使用該加密方式,取而代之的是New Password。
New Password在MySQL 4.1版本以后,New Password成為了默認(rèn)的密碼加密方式。其實(shí)現(xiàn)方式如下: 1. 將用戶輸入的密碼字符串轉(zhuǎn)為一個(gè)unsigned char數(shù)組,并在末尾添加'\0'。 2. 利用SHA1算法對(duì)該數(shù)組進(jìn)行加密,并將加密結(jié)果再次轉(zhuǎn)為unsigned char數(shù)組。 3. 將加密后的數(shù)組再次通過(guò)SHA1算法進(jìn)行加密,并將加密結(jié)果轉(zhuǎn)為一個(gè)字符串。 4. 將該字符串賦值給數(shù)據(jù)庫(kù)密碼字段。 New Password采用SHA1算法進(jìn)行兩次加密,更加安全可靠,被廣泛使用。