gpt4 book ai didi

java - Java SecretKeySpec 的 C# 等价物是什么

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:25:50 36 4
gpt4 key购买 nike

我有以下用 Java 编写的代码

Mac mac = Mac.getInstance("HmacSHA1");
String secretKey ="sKey";
String content ="Hello";

byte[] secretKeyBArr = secretKey.getBytes();
byte[] contentBArr = content.getBytes();

SecretKeySpec secret_key = new SecretKeySpec(secretKeyBArr,"HmacSHA1");
byte[] secretKeySpecArr = secret_key.getEncoded();

mac.init(secret_key);

byte[] final = mac.doFinal(contentBArr);

我想用 C# 做同样的例子。所以,我写了下面的代码

HMACSHA1 hmacsha1 = new HMACSHA1();
string secretKey = "sKey";
string content = "Hello";

byte[] secretKeyBArr = Encoding.UTF8.GetBytes(secretKey);
byte[] contentBArr = Encoding.UTF8.GetBytes(content);

hmacsha1.Key = secretKeyBArr;
byte[] final = hmacsha1.ComputeHash(contentBArr);

最终结果并不相等。 secretKeyBArr 和 contentBArr 是字节数组,它们的值在两个示例中都相同。未知的是传递给 mac.init() 的 SecretKeySpec。那么,C# 中的同一个类是什么?

最佳答案

结果相同,但 Java 默认使用有符号字节,而 C# 默认使用无符号字节。

此外,SecretKeySpec 本身通常不会更改基础数据。你需要例如将 DES key 规范放入 SecretKeyFactory 中,以确保奇偶校验位设置正确(在生成的 SecretKey 中)。因此不需要等效项,因为类本身除了包装数据外几乎没有做任何事情。

关于java - Java SecretKeySpec 的 C# 等价物是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13829332/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com