項目需求:
在java web項目中使用apache shiro來進行安全保護,並使用shiro提供的加密方法來對密碼進行加密。
在另外一個c#項目中,需要對接這個java web項目,並且驗證的密碼是shiro進行加密的。
這個時候就需要對C#端的加密方式稍作修改,才能達到java和c#的加密結果的一致性
注:如果shiro跟springmvc集成了,只需要在spring中配置好加密方式(例如sha,md5.....)以及迭代次數,shiro在認證的時候不需要寫一下代碼,以下代碼只是用於特殊場景。
java代碼:
Sha512Hash encodedPassword = new Sha512Hash("123456", "itrider", 1024);//該類使用的是shiro的類,參數對應的是密碼/鹽值/迭代次數
String result = encodedPassword.toBase64(); //得到的即加密後的結果
c#代碼:
string salt = "itrider";
string password = "123456";
byte[] saltPasswordValue = UTF8Encoding.UTF8.GetBytes(salt + password);
// 計算哈希值
SHA512 sha512 = SHA512.Create();
saltPasswordValue = sha512.ComputeHash(saltPasswordValue );
for (int i = 0; i < 1023; i++)//因爲上面計算了一次hash,所以只需要迭代1023次
{
saltPasswordValue = sha512.ComputeHash(saltPasswordValue );
}
string result = Convert.ToBase64String(saltPasswordValue );
最終兩個輸出結果是完全一致的~
其它加密方式應該也差不多,暫沒時間測試