gpt4 book ai didi

java - Coldfusion和java加密函数

转载 作者:行者123 更新时间:2023-11-29 06:24:10 25 4
gpt4 key购买 nike

在尝试将 uservoice 的 token 生成器从 java 转换为 coldfusion 时,我注意到 java 中的哈希函数执行 coldfusion 中的哈希函数:

String salted = "63bfb29835aedc55aae944e7cc9a202dmbdevsite";
byte[] hash = DigestUtils.sha(salted);

给出 = [-19, -18, 7, 92, -121, 13, 88, 68, -84, 61, -77, -20, -85, -102, -102, -62, -70 , 45, -16, 18]

<cfset Salted="63bfb29835aedc55aae944e7cc9a202dmbdevsite" />
<cfset hash=Hash(Salted,"SHA") />
<cfset arrBytes = hash.GetBytes() />

给出 = 69686969485553675655486853565252656751686651696765665765576567506665506870484950

谁能解释一下?

谢谢

最佳答案

您实际上得到了相同的结果,但是输出的编码不同。对于 Java,它是一个字节数组,重要的是要注意 byte 是有符号的。对于 ColdFusion,您得到的是十六进制,出于某种原因,每个十六进制字符都以十进制格式输出。如果您查看 http://asciitable.com/ 并将十进制数字映射到它们的字符(例如 69 到 E,68 到 D,48 到 0),您会得到:

EDEE075C870D5844AC3DB3ECAB9A9AC2BA2DF012

散列结果通常存储为十六进制。如果您将 Java 版本编码为十六进制,您将得到相同的结果:

byte[] bytes = { -19, -18, 7, 92, -121, 13, 88, 68, -84, 61, -77, -20,
-85, -102, -102, -62, -70, 45, -16, 18 };

StringBuilder sb = new StringBuilder(2 * hash.length);
for (byte b : hash) {
sb.append("0123456789ABCDEF".charAt((b & 0xF0) >> 4));
sb.append("0123456789ABCDEF".charAt((b & 0x0F)));
}
String hex = sb.toString();
System.out.println(hex);

关于java - Coldfusion和java加密函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5689724/

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