gpt4 book ai didi

android - SHA-256 哈希在 Android 中产生错误的结果

转载 作者:太空狗 更新时间:2023-10-29 13:32:51 25 4
gpt4 key购买 nike

我正在尝试使用 1111 作为 salt 使用 SHA-256 编码来加密 12345,我得到的答案是:010def5ed854d162aa19309479f3ca44dc7563232ff072d1c87bd85943d0e930 这与 this site 返回的值不同.

这是代码 fragment :

public String getHashValue(String entity, String salt){
byte[] hashValue = null;
try {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
digest.update(entity.getBytes("UTF-8"));
digest.update(salt.getBytes("UTF-8"));
hashValue = digest.digest();
} catch (NoSuchAlgorithmException e) {
Log.i(TAG, "Exception "+e.getMessage());
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return BasicUtil.byteArrayToHexString(hashValue);
}

我已经用 SO 的样本验证了我的打印方法,结果很好。谁能告诉我这里出了什么问题?

澄清一下 - 当我在 iOS 代码中加密相同的值和盐时,返回的值与转换站点给出的值相同。

最佳答案

如果您在该站点为 hmac secret 填写可选部分,将使用 HmacSHA256 算法。使用此函数可以产生相同的结果:

public static String getHmac(String entity, String salt) throws Exception{
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec(salt.getBytes(), "HmacSHA1"));
byte[] bs = mac.doFinal(entity.getBytes());
return new HexDumpEncoder().encode(bs); // use your favorite hex converter
}

如果您想从该站点获得相同的输出,请尝试在不使用 hmac key 的情况下散列此值“123451111”。

很明显,调用 MessageDigest.update 两次等同于使用连接值调用它一次。

关于android - SHA-256 哈希在 Android 中产生错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13652817/

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