gpt4 book ai didi

c# - Java SHA1 哈希到 base64 : unsigned bytes?

转载 作者:搜寻专家 更新时间:2023-11-01 02:25:53 24 4
gpt4 key购买 nike

我试图在 C#Java散列一个值 (SHA1),然后返回base64 表示。我得到 2 个不同的结果。

我知道这是因为 Java 使用有符号字节,而 C# 没有

C# 版本:

static public string toSHA1(string toEncrypt)
{
return toSHA1(toEncrypt, new UTF8Encoding());
}

static public string toSHA1(string toEncrypt, Encoding encoding)
{
String salt = "fE4wd#u*d9b9kdKszgè02ep5à4qZa!éi6";
SHA256Managed sha256hasher = new SHA256Managed();
byte[] hashedDataBytes = sha256hasher.ComputeHash(encoding.GetBytes(toEncrypt + salt));
return Convert.ToBase64String(hashedDataBytes);
}

Java 版本:

public static String toSHA1(String toEncrypt) {
return toSHA1(toEncrypt, "UTF-8");
}

public static String toSHA1(String toEncrypt, String encoding) {
String salt = "fE4wd#u*d9b9kdKszgè02ep5à4qZa!éi6";
String res = null;
toEncrypt = toEncrypt + salt;
try {
byte[] dataBytes = toEncrypt.getBytes(encoding);
MessageDigest md = MessageDigest.getInstance("SHA-1");
res = Base64.encodeBytes(md.digest(dataBytes));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return res;
}

我无法找到使用 Java 获得正确 base64 结果的解决方案。

signed 值转换为unsigned 值会强制使用int 数据类型,但是一旦我将其放入 byte 数据类型,我得到了我的 signed 字节......

Base64.encodeBytes 正在等待一个 byte 数组,所以有什么方法可以传递一个 unsigned byte数组到这个方法?我可以用那个 int 数组做什么? :

int[] dataInt = new int[dataBytes.length];
// signed to unsigned
for (int i=0; i<dataBytes.length; i++)
{
dataInt[i] = (dataBytes[i] & 0xFF);
}

不能修改C#版本,我必须调整Java版本才能得到相同的结果。

最佳答案

问题很简单...来自您的 C# 代码:

SHA256Managed sha256hasher = new SHA256Managed()

SHA-256 != SHA-1。使用 SHA1 class 而不是在 C# 中,或者在 Java 中也使用 SHA-256。由于您显然无法更改 C# 代码,因此您应该改为更改 Java:

MessageDigest md = MessageDigest.getInstance("SHA-256");

完成后,base64 编码的数据在两个平台上应该是相同的。尽管字节在 Java 中是有符号的,但 base64 编码器它们视为无符号...它们基本上只对位感兴趣。

我还强烈建议您在源代码中用 ASCII 表示盐,使用 \uxxxx 转义任何非 ASCII 字符。这将防止由于使用错误的编码进行编译而导致的问题。

关于c# - Java SHA1 哈希到 base64 : unsigned bytes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22967626/

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