2009-09-28 48 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