2009-09-28 49 views
0

我有一些麻烦匹配来自RSA签名 一个Base64 SHA1哈希在C#中的返回结果的动作as3crypto库返回的值。AS3Crypto RSA签名

我正在传递一个Base64哈希解码为一个字节数组到符号() 函数提供的as3crypto和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库的经验?

任何帮助将是巨大的!

感谢,

乔恩

+0

“不要紧,该函数以即使它工作在字节数组级别返回十六进制?” ...你的意思是,它需要在第64页,或者你真的认为它需要在十六进制...也许这是问题?基地64和十六进制是显着不同的...任何十六进制值是一个几乎有效的base64值(除了基地64总是填充的长度可分为4),所以解码器可能会把它... – back2dos 2009-09-29 08:53:56

+0

也是,什么当你验证签名时,你会得到吗?它工作吗? – back2dos 2009-09-29 09:00:23

+0

签名算法需要一个字节数组,但所有的例子都是从十六进制到一个bytearay,所以我把base64转换为一个字节数组,它们会转换为相同的字节吗?验证也不起作用,这个库的问题是没有文档。 – Jon 2009-09-29 09:23:42

回答

1

我假设你的C#版本使用RSA PKCS #1 version 1.5。该标准通过在作为

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

组成一个字节的字符串纵观as3crypto代码做一个RSA私钥操作计算的签名显示符号操作过程中RSAKey类不添加任何OID。因此,如果你不这样做,你会得到不正确的结果。

看代码也表明as3crypto易受this attack,因为它没有正确验证的填充。这次袭击已超过3年。因此,使用不同于as3crypto的库似乎很不错。

+0

不幸的是,没有其他的图书馆,感谢您的信息! – Jon 2009-09-29 19:10:46