2013-06-19 61 views
0

我想要一个字符串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必须做得到这个散列?

谢谢。

+0

你〜应变的SHA1 g以上是'48A61A7D2DD56F8A2D301B5EC99152A3BA857C17'。当他们的文档显示“用SHA1编码,然后编码为十六进制”时,它实际上是PHP的'sha1()'函数在缺省情况下的功能。没有几种计算SHA1的方式,所以他们的文档都是错误的,或者你错误地将字符串复制到散列。你有没有检查过他们没有在输入中添加某种“盐”? salt是一个字符串,您可以在散列之前将其附加或添加到字符串中,并且两端同意以获得额外的安全性。 – Benjamin

+0

@Benjamin有两种计算SHA1的方法:http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf第6.1节 – calccrypto

+0

@calccrypto你可以扩展一下吗?我没有时间和知识来阅读这份文件,但我肯定有兴趣了解更多。对我而言,只有一个SHA1结果可能给出了一个二进制字符串。 – Benjamin

回答

0

该NFE手册是错误的。该示例字符串具有串的端部的白色空间..

其中出现 5176383d & cIdToken = 000001105855042013000真的 5176383d & cIdToken = 000001105855042013000

Convencional功能这一点使用SHA1所解决问题的CRIPT)

在MySQL

,你可以这样做: SHA1(yourExampleString)... 在PHP能有像...