C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了C#SHA-256与Java SHA-256.结果不同?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_874_1@
我想将一些 Java中的代码转换为C#.

Java代码

private static final byte[] SALT = "NJui8*&N823bVvy03^4N".getBytes();

  public static final String getSHA256Hash(String secret)
  {
    try {
      messageDigest digest = messageDigest.geTinstance("SHA-256");
      digest.update(secret.getBytes());
      byte[] hash = digest.digest(SALT);
      StringBuffer hexString = new StringBuffer();
      for (int i = 0; i < hash.length; i++) {
        hexString.append(Integer.toHexString(0xFF & hash[i]));
      }
      return hexString.toString();
    } catch (NoSuchAlgorithmException E) {
      e.printStackTrace();
    } 
    throw new RuntimeException("SHA-256 realization algorithm not found in JDK!");
  }

当我尝试使用the SimpleHash class时,我得到了不同的哈希值

更新:

例如:

Java:byte [] hash = digest.digest(SALT);
生成(前6个字节):

[0] = 9
[1] = -95
[2] = -68
[3] = 64
[4] = -11
[5] = 53
....

C#代码(类SimpleHash):
String hashValue = Convert.ToBase64String(hashWithSaltBytes);
hashWithSaltBytes有(前6个字节):

[0] 175 byte
[1] 209 byte
[2] 120 byte
[3] 74  byte
[4] 74  byte
[5] 227 byte

解决方法

String.getBytes method使用平台的认字符集将字符串编码为字节,而您链接的示例代码使用UTF-8.

试试这个:

digest.update(secret.getBytes("UTF-8"));

其次,Integer.toHexString method返回十六进制结果,没有前导0.

大佬总结

以上是大佬教程为你收集整理的C#SHA-256与Java SHA-256.结果不同?全部内容,希望文章能够帮你解决C#SHA-256与Java SHA-256.结果不同?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。