首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >散列内容,然后转换为十六进制结果。

散列内容,然后转换为十六进制结果。
EN

Stack Overflow用户
提问于 2016-07-29 11:28:52
回答 3查看 541关注 0票数 1

我有一根绳子:

代码语言:javascript
复制
String message = "{\"name\":\"三菱グループ\"}\n"

我想对此消息执行的操作:

  1. 使用SHA-256 algo散列消息。
  2. 将散列从步骤1转换为小写十六进制字符串。

我的应用程序

代码语言:javascript
复制
25335a59763ad40ae13d1d4a011efcdc2aa2c4885295aebeb393bc96bb927f66

有人得到不同的结果吗?我一直在挠头,因为远程服务器坚持认为正确的结果是

代码语言:javascript
复制
20de051e351ebc53c83902a72ac916e5a46228fc3e5ec070bf441612e20164d9

我的假设是,只要消息保持不变,这些操作的结果将始终是相同的,无论您对同一条消息执行这两个链接操作多少次。如果不是这样的话,请告诉我。

我正在添加另一条测试消息(删除换行符):

代码语言:javascript
复制
String message = "{\"name\":\"三菱グループ\"}";

我的代码产生了

代码语言:javascript
复制
7902fb68f1f90f700788613e7f667968beb4abd724abb545e00e01d65e74a772

而远程服务器产生

代码语言:javascript
复制
d3df5e50703eb5ff2fd17210af93b6b2ef1e5640c89787405352998d955a4e63

谢谢

EN

回答 3

Stack Overflow用户

发布于 2016-07-29 11:34:16

我尝试将您的字符串传递给在线SHA256计算器,并获得了与您的应用程序所产生的输出相同的输出,无论是行中断还是不换行。

只要消息不包含任何非拉丁字符,我和服务器之间的calc结果总是一样的。

由于SHA256算法对一个字节序列进行操作,所以您的程序还需要一个步骤:它将String转换为一个字节数组,即如下所示:

代码语言:javascript
复制
text.getBytes(StandardCharsets.UTF_8)

如果服务器使用的编码与UTF-8或您所使用的任何编码不同,则此转换的结果将有所不同。

当您发送一个只有拉丁文字符的字符串时,所有字符都将被编码为一个字节,并且不会有任何不同之处。

票数 0
EN

Stack Overflow用户

发布于 2016-07-29 11:38:37

这在很大程度上取决于您如何将其传递给远程服务器。例如,一些服务器将无法正确解码GET请求中的亚洲字符。其他服务器将减少输入的数据。如果没有关于如何将其传递给远程服务器的更多信息,可能很难找到答案。

票数 0
EN

Stack Overflow用户

发布于 2016-07-29 11:57:35

代码语言:javascript
复制
String message = "{\"name\":\"三菱グループ\"}";
String sha256hex = org.apache.commons.codec.digest.DigestUtils.sha256Hex(message);
System.out.println("hash: " + sha256hex);

结果:散列: 7902fb68f1f90f700788613e7f667968beb4abd724abb545e00e01d65e74a772

在这种情况下,如果远程服务器使用bash脚本,您是否需要向消息中添加另一个"\“。因此,它变成“{\”名称\:\“三菱グループ\”};

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38657716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档