2013-08-01 25 views
0

這裏是我的過程:解密的CryptoAPI SIMPLEBLOB在Java中

的CryptoAPI:

  1. 產生AES會話密鑰
  2. 使用接收者的公鑰來加密和出口(1)在SIMPLEBLOB 與RSA
  3. 發送到SIMPLEBLOB收件人

的Java:

  1. 收件人收到(3)
  2. 收件人希望使用自己的私鑰

這是非常標準的,我相信解密SIMPLEBLOB。需要將接收到的字節數組(從上面的第4步開始)進行字節反轉。但是,由於某些原因,接收的字節數超過了RSA算法可以解密的最大允許字節數。錯誤是「javax.crypto.IllegalBlockSizeException:數據不能超過256個字節」。所以還有一些我不明白的事情。有人可以解釋如何正確解密Java中的SIMPLEBLOB嗎?資源將有所幫助。

+0

你見過http://msdn.microsoft.com/en-us/library/windows/desktop/aa375601.aspx#simp_BLOB嗎?由CryptExportKey產生的數據除了實際的密文外還包含一個特定的頭部。 –

+0

@IgorTandetnik謝謝,我不知道我是如何錯過的。所以我會刪除「BYTE encryptedkey [rsapubkey.bitlen/8];」部分來自SIMPLEBLOB,反轉字節,然後使用Java中的RSA對其進行解密。 – KyleM

+0

你如何分配公鑰? TLS不能在這裏使用是否有原因? – ntoskrnl

回答

0

看看本頁:SIMPLEBLOB structure Blob的前12個字節屬於BLOBHEADER。要解密密鑰,請從加密塊的第12個位置開始。

+0

是的,我們解決了這個問題,請參閱上面關於我的問題的評論。感謝您的回答。 – KyleM