使用as3crypto在as3中使用as3crypto从字符串'12345‘中生成as3散列,就像在这里的示例中那样:
var sha1:SHA1 = new SHA1;
var src:ByteArray = Hex.toArray("12345");
var digest:ByteArray = sha1.hash(src);
trace('SHA:' + Hex.fromArray(digest));结果: ec60c0fd70d82a7785f6c9a02dbe16f2e40b1344
用PHP中相同的字符串制作SHA1:
print "SHA:".sha1("12345");结果: 8cb2237d0679ca88db6464eac60da96345513964
如果我尝试其他工具来获得散列,就会得到第二个结果,因此PHP的结果看起来是正确的。
问:,我如何才能获得与as3crypto?相同的哈希
顺便说一句:在测试时,我发现用as3crypto的另一种方式给了我另一种(错了吗?)结果:
var src:ByteArray = new ByteArray();
src.writeUTF("12345");
var digest:ByteArray = sha1.hash(src);
trace('SHA:' + Hex.fromArray(digest));结果: b98cfbc53daec4029895585ab198f7403d0d0506
发布于 2011-02-17 16:38:37
十六进制(您正在用Hex.toArray转换它)值12345与字符串"12345“不一样。
您正在将十进制数转换为十六进制字节数组并对其进行散列处理,然后将其与用PHP生成的字符串的哈希进行比较。这些永远都比不上。
如果您绝对需要将两个十六进制数比较在一起,那么对PHP的更改可能会奏效。
打印"SHA:“sha1(dechex(12345));
有关更多信息,请参见dechex文档。
发布于 2012-04-14 23:18:47
使用php库匹配php sha1的正确方法是执行以下操作:
var src:ByteArray = Hex.toArray(Hex.fromString(srcString));
var sha1:SHA1 = new SHA1();
var hashedString:String = Hex.fromArray(sha1.hash( src ));正如其他人所提到的,第一个附加的Hex.fromString避免了十进制转换。
注意: as3corelib版本要简单得多:as3corelib SHA1
var hashedString:String = SHA1.hash( srcString );发布于 2011-02-17 16:25:27
PHP输出绝对是正确的。我对MySQL的sha1函数进行了测试:
mysql> select sha1('12345');
+------------------------------------------+
| sha1('12345') |
+------------------------------------------+
| 8cb2237d0679ca88db6464eac60da96345513964 |
+------------------------------------------+可能的罪魁祸首是,您在这一行的输入数据上使用了Hex.toArray():
var src:ByteArray = Hex.toArray("12345");当您需要原始字符串在字节数组中时。我不知道AS3,所以不能回答为什么你的第二次尝试也失败了。
https://stackoverflow.com/questions/5031566
复制相似问题