我想要一个字符串sha1编码,然后到十六进制,长度为40个字符。这是一个Java web服务,客户端将使用PHP完成。字符串到sha1,然后到十六进制(长度为40)
原始代码是Java(I没有源,仅文档)和它散列以下字符串:
chNFe = 43120910585504000174650010000000541123456781 & nVersao = 100 & tpAmb = 2 & dhEmi = 323031322d30392d32375431363a32303a33342d30333a3030 & VNF = 1000.00 & vICMS = 180.00 & digVal = 37327151612b623074616f514f3966414a7766646c5875715176383d & cIdToken = 0000011058550420130001
向该followi ng十六进制: 3FACB55248244D98C658FC8A826413BCEF10A4AE
以上示例来自web服务文档,它表示字符串使用sha1编码,然后结果编码为十六进制。
我试着sha1然后dechex和许多其他方式,但不能得到相同的结果。有没有人知道什么类型的编码PHP必须做得到这个散列?
谢谢。
你〜应变的SHA1 g以上是'48A61A7D2DD56F8A2D301B5EC99152A3BA857C17'。当他们的文档显示“用SHA1编码,然后编码为十六进制”时,它实际上是PHP的'sha1()'函数在缺省情况下的功能。没有几种计算SHA1的方式,所以他们的文档都是错误的,或者你错误地将字符串复制到散列。你有没有检查过他们没有在输入中添加某种“盐”? salt是一个字符串,您可以在散列之前将其附加或添加到字符串中,并且两端同意以获得额外的安全性。 – Benjamin
@Benjamin有两种计算SHA1的方法:http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf第6.1节 – calccrypto
@calccrypto你可以扩展一下吗?我没有时间和知识来阅读这份文件,但我肯定有兴趣了解更多。对我而言,只有一个SHA1结果可能给出了一个二进制字符串。 – Benjamin