0

我在将 RSA 返回的值与 actionscript as3crypto 库中的 Base64 SHA1 哈希值与 c# 中返回的结果相匹配时遇到了一些麻烦。

我将解码为字节数组的 Base64 哈希传递给 as3crypto 中提供的 sign() 函数,并对结果进行 base64 编码。但是,此结果永远不会与执行相同任务的 ac# 函数返回的结果相匹配。即使函数在字节数组级别工作,该函数接受并返回十六进制是否重要?

请查看我下面的签名功能以检查我没有遗漏任何内容!

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 库有很多经验吗?

任何帮助都会很棒!!!

谢谢,

乔恩

4

2 回答 2

1

我假设您的 C# 版本使用的是RSA PKCS #1 version 1.5。该标准通过对组成为的字节字符串执行 RSA 私钥操作来计算签名

0x00 0x01 || 0xff* || 0x00 || OID || hash

查看 as3crypto 代码显示 RSAKey 类在签名操作期间没有添加任何 OID。因此,如果您不这样做,您将得到不正确的结果。

查看代码还表明 as3crypto 容易受到这种攻击,因为它没有正确验证填充。这次攻击已经超过 3 年了。因此,使用与 as3crypto 不同的库似乎是件好事。

于 2009-09-29T17:20:09.767 回答
0

Now there is an ActionScript crypto library compatible with .NET. Here it is: http://code.google.com/p/flame. Looks like it supports RSA exactly the way .NET does.

于 2012-02-06T00:23:46.687 回答