突然在網上發現,在md5的加解密站長工具中不是所有的md5加密值都是可以解密的,仔細看了一下,為了保證資料的更高的安全性,還有一種md5鹽值加密的方法。
1.普通md5加密
加密後生成的字串如下:public class md5test1 catch (nosuchalgorithmexception e) catch (exception e)
char chararray = input.tochararray();
byte bytearray = new byte[chararray.length];
for (int i = 0; i < chararray.length; i++)
bytearray[i] = (byte) chararray[i];
byte md5bytes = md5.digest(bytearray);
stringbuffer hexvalue = new stringbuffer();
for (int i = 0; i < md5bytes.length; i++)
return hexvalue.tostring();
} public static void main(string args)
}
然後問題就來了,直接拿著這個32位的字串去站長工具上面去解密,秒解。。。細思極恐。。。看了很多的解釋,基本上是說md5進行的常規加密生成的字串儲存到相應的資料庫,結果你來調的時候別人直接拿現成的就可以了。
2.md5鹽值加密。
原理是通過生成隨機數與md5生成字串進行組合,這樣的隨機性和不確定性就算是再怎麼厲害的站長工具都解不開。
執行main方法後的操作:public class md5test2
} string salt = sb.tostring();
password = md5hex(password + salt);
char cs = new char[48];
for (int i = 0; i < 48; i += 3)
return new string(cs);
} /**
* 獲取十六進製制字串形式的md5摘要
*/
private static string md5hex(string src) catch (exception e)
} public static boolean verify(string password, string md5)
string salt = new string(cs2);
return md5hex(password + salt).equals(new string(cs1));
} public static void main(string args)
}
首先入眼一看就覺察到不同,總共生成了32+18共50位的字串,在**中定義了18位隨機數與md5加密字串的拼接,這個時候你再去站長工具,站長工具會告訴你我們解不開。。因為加入隨機數,代表了他的不確定性。可以這麼說,自己本機每次執行都會生成不同的加密字串,也就更好的保證了資料的安全。
其實加密的方式方法有很多種,還需要我們不斷的去學習。
鹽值加密 MD5
什麼叫鹽值加密 spring security怎樣進行鹽值加密 以前的md5原理是 密碼密文 md5演算法 密碼明文 這樣明文與密文其實還是一一對應的 那麼人家就可以用字典攻擊 就是乙個乙個的試 來探測密碼 加鹽 鹽值加密 的演算法很多 spring security用的是 密碼密文 md5演算法 ...
Shiro密碼的MD5加密 MD5鹽值加密
用md5加密演算法後,前台使用者輸入的字串如何使用md5加密,需要做的是將當前的realm 的credentialsmatcher屬性,替換為md5credentialsmatcher 由於md5credentialsmatcher已經過期了,推薦使用hashedcredentialsmatcher...
MD5加密工具類 帶鹽值
我們在使用md5加密時通常會通過加鹽的方式來提高安全性,下面的示例採用的是md5 隨機鹽值的方式 import org.apache.commons.lang.randomstringutils import org.springframework.util.digestutils md5加密工具類...