apache shiro中SHA512使用salt並迭代N次進行加密對應C#的加密方法

項目需求:

     在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 );


最終兩個輸出結果是完全一致的~

其它加密方式應該也差不多,暫沒時間測試




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章