2014-05-14 81 views
1

在c#哈希值生成使用HMAC/Java和C#SHA512

public static string HashToString(string message, byte[] key) 

{ 

    byte[] b=new HMACSHA512(key).ComputeHash(Encoding.UTF8.GetBytes(message)); 

    return Convert.ToBase64String(b); 

} 

client.DefaultRequestHeaders.Add( 「X-散列」,散列);

var encryptedContent = DataMotion.Security.Encrypt(key,Convert.FromBase64String(iv),serializedModel);

var request = client.PostAsync(ApiUrlTextBox.Text,encryptedContent,new JsonMediaTypeFormatter());

在Java

protected String hashToString(String serializedModel, byte[] key) { 

String result = null; 

Mac sha512_HMAC; 

try { 

    sha512_HMAC = Mac.getInstance("HmacSHA512");  

    SecretKeySpec secretkey = new SecretKeySpec(key, "HmacSHA512"); 

    sha512_HMAC.init(secretkey); 

    byte[] mac_data = sha512_HMAC.doFinal(serializedModel.getBytes("UTF-8"));   

    result = Base64.encodeBase64String(mac_data); 

}catch(Exception e){ 
} 
} 

O/P:YE + AZPqaKrU14pui4U5gBCiAbegNvLVjzVdGK3rwG9QVzqKfIgyWBDTncORkNND3DA8jPba5xmC7B5OUwZEKlQ ==

我已經基於C#編寫的代碼hashtostring方法在Java。這是否正確? (輸出是不同的,因爲每個過程在兩種情況下都是動態的)。

+0

取決於你想要什麼archieve做替換Java代碼以下行。如果你想確保哈希密碼,你應該閱讀:https://crackstation.net/hashing-security.htm – user743414

+0

我給json對象作爲輸入和密鑰。 – user3635271

+0

然後它看起來不錯,順便說一句。我不是java專家。你想做什麼?你想散列一個密碼,然後檢查一個給定的密碼是否正確?如果是這樣,我強烈建議更改該代碼。 – user743414

回答

0

java和C#代碼都給出了相同的結果(相同的散列碼)。你應該再檢查一次。

月底

result = Base64.getEncoder().encodeToString(mac_data);