我需要将字符串转换为SHA1十六进制哈希值,以下是我使用的代码。

val md = java.security.MessageDigest.getInstance("SHA-1")
val ha = new sun.misc.HexDumpEncoder().encode(md.digest("Foo".getBytes))
print(ha)

但我没有得到十六进制的值。 我可以用下面的代码在Python中实现这个目标。

int(hashlib.sha1("Foo".encode(encoding='UTF-8', errors='strict')).hexdigest(), 16)

在Scala中Python的相关hexdigest()是什么?

python
scala
hash
toofrellik
toofrellik
发布于 2019-08-02
1 个回答
vbuhlev
vbuhlev
发布于 2019-08-02
已采纳
0 人赞同

基本上,任何java方式的字节数组到字符串的转换都可以完成工作。

Here是一个讨论将字节数组转换为十六进制字符串的不同选项的主题。

你可以试试这种方式。

import javax.xml.bind.DatatypeConverter
val md = java.security.MessageDigest.getInstance("SHA-1")
val ha = DatatypeConverter.printHexBinary(md.digest("Foo".getBytes))
print(ha)

为了从字符串中创建整数,你将不得不使用BigInteger,因为Int和Long会溢出。

val i = new BigInteger(ha, 16)