2014-05-14 54 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);