我在将RSA在actionscript as3crypto库中对Base64 SHA1散列签名的返回值与c#中返回的结果进行匹配时遇到了一些问题。
我将一个符号散列作为字节数组传递给as3crypto和Base64中提供的base64 ()函数,并对结果进行编码。但是,此结果永远不会与执行相同任务的c#函数返回的结果相匹配。即使在字节数组级别工作,函数接受并返回十六进制有关系吗?
请看我下面的签名功能,看看我没有遗漏任何东西!
private function signHash(hashInBase64:String):String
{
var src:ByteArray = Base64.decodeToByteArray(hashInBase64);
var key:RSAKey = getRSAKey();
var dst:ByteArray = new ByteArray();
key.sign(src, dst, src.length);
return Base64.encodeByteArray(dst);
}有谁对AS3Crypto库有很多经验吗?
任何帮助都是最好的!
谢谢,
琼恩
发布于 2009-09-29 17:20:10
我假设您的C#版本使用的是RSA PKCS #1 version 1.5。该标准通过对组成如下的字节字符串执行RSA私钥操作来计算签名
0x00 0x01 || 0xff* || 0x00 || OID || hash查看as3crypto代码可以看到,RSAKey类在签名操作期间没有添加任何OID。因此,如果你不这样做,你会得到不正确的结果。
查看代码还会发现as3crypto容易受到this attack的攻击,因为它没有正确地验证填充。这种攻击已经超过3年了。因此,使用与as3crypto不同的库似乎是一个很好的选择。
发布于 2012-02-06 08:23:47
现在有了一个与.NET兼容的ActionScript加密库,它就是:http://code.google.com/p/flame。看起来它完全像.NET一样支持RSA。
https://stackoverflow.com/questions/1489269
复制相似问题