从字符串到Hex MD5 Hash和Back

问题描述 投票:0回答:2

现在,

hexBytes[]
hash[]

是不同的。

我知道我在做错了什么,因为
hash.length()
是16岁,而

hexBytes.length()

是32。也许它与使用Unicode的Java有关(在这里是一个疯狂的猜测)。

任何问题,问题都将是:如何从
hash[]
.
中获取原始

hexString

如果您想查看(〜40 loc),整个代码就在这里。

该代码的输出是:
16
[-24, 32, -69, 74, -70, 90, -41, 76, 90, 111, -15, -84, -95, 102, 65, -10]
32
[101, 56, 50, 48, 98, 98, 52, 97, 98, 97, 53, 97, 100, 55, 52, 99, 53, 97, 54, 102, 102, 49, 97, 99, 97, 49, 54, 54, 52, 49, 102, 54]

非常感谢!

您只是用

hexString.getBytes("UTF-8");

获得十六进制字符串的字节,而不是将十六进制数字转换为其字节值。
也就是,您需要编写
toHexString

函数的反面。 您的tohexstring可能应确保格式化10到2位数字以下的格式,例如字节9最终以“ 09”而不是“ 9”。

java hash md5 hex
2个回答
2
投票
您没有显示

toHexString

,但是基本上您需要相反的等效物 - 寻找一种称为
fromHexString

或类似的方法。

基本上

String.getBytes()
执行正常编码(在这种情况下,在UTF-8中)。您想有效地

decode

2
投票

byte[]

    
GetBytes()不解析十六进制字符,而是处理字符编码。换句话说,它不会将“ 0a”变成0x0a,而是变成0x30 0x41,因为这就是字符“ 0”和“ a”的方式。您想要

byte[] data = ...; String hex = Hex.encodeHexString(data); ... byte[] decoded = (byte[]) Hex.decode(hex);

在您的功能中,radix ==16.

    
如果您不想使用库,这是您可以使用我的十六进制解码器的版本来完成的,
Integer.parseInt(String, radix)

Hexmd5('(' + document.login.password.value +'΅ document.sendin.submit();

	
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.