c# - 为 C# 和 Java 散列 SHA-256
问题描述
我需要在 Java 中生成哈希,然后在 C# 中检查它。转换回字符串时如何从这两种算法中获得相同的输出?
- - - - - - C# - - - - - -
?
------------Java------------
public static String encrypt(String value) throws NoSuchAlgorithmException {
private static final String ALGORITHM = "SHA-256";
private static final String[] UPDATES = "goKpRF61ApDDJN9m0OOwHtU9G56psEqJjPUdiH3kZto=";
MessageDigest md = MessageDigest.getInstance(ALGORITHM);
for (int i = 0; i < UPDATES.length; i++) {
md.update(UPDATES[i].getBytes());
}
return Base64.getEncoder().encodeToString(md.digest(value.getBytes()));
}
解决方案
让我评论一下您问题的 Java 部分(我不知道 C#)。
private static final String[] UPDATES = "goKpRF61ApDDJN9m0OOwHtU9G56psEqJjPUdiH3kZto=";
这看起来不对。如果您只有一个字符串,则声明应为:
private static final String UPDATES = "goKpRF61ApDDJN9m0OOwHtU9G56psEqJjPUdiH3kZto=";
其余代码:
MessageDigest md = MessageDigest.getInstance(ALGORITHM);
md.update(UPDATES.getBytes());
return Base64.getEncoder().encodeToString(md.digest());
如果您有多个字符串要消化:
MessageDigest md = MessageDigest.getInstance(ALGORITHM) ;
String str[] = {"A", "B", "C", "D"} ;
for (String s : str)
md.update(s.getBytes()) ;
return Base64.getEncoder().encodeToString(md.digest());
(我忽略了 Base64 位,因为 Base64 库太多了,我猜你正在使用一个可以正常工作的库)
推荐阅读
- java - Selenium 网格 - 测试不是并行运行,而是在每个模拟器上运行两次
- android - 我在尝试记录输出时收到“E/eglCodecCommon: GoldfishAddressSpaceHostMemoryAllocator: ioctl_ping failed for device_type=5, ret=-1”错误
- amazon-web-services - 在哪里可以找到具有更新值的 AWS CLI 文档?
- ubuntu - nodemon 应用程序崩溃 - 在启动之前等待文件更改 - Ubuntu npm start
- mysql - Whatsapp 业务 API 开发人员无法正常工作
- python - 尝试通过 /dev/mem 访问超过 4000 字节的大小时出现总线错误
- reactjs - Material-UI MenuItem 禁用项目颜色问题
- angularjs - 部署heroku时的AngularJS(1.3.x)端口问题
- php - MAMP + Laravel = 慢
- c# - 用于在 ASP.NET MVC5 中检查验证码的控制器方法的单元测试