我一直在玩充氣城堡的RSA(輕量級API)的實現,並得到了基本的想法。查看他們的spec JCE提供程序實現,我注意到不同的填充方案可以用於RSA。據我所知,默認情況下使用null填充。所以我開始探索OAEP填充,特別是OAEPWithSHA512AndMGF1Padding
。用Google搜索並不是非常有用,所以我開始挖掘BC的源代碼,發現org.bouncycastle.jce.provider.JCERSACipher
類。但看着initFromSpec
很快就讓我頭疼......具體來說,我不明白可以傳遞給OAEPEncoding
構造函數的最後兩個參數是什麼。根據BC的API OAEPEncoding
構造函數,它允許四個參數接受Digest mgf1Hash
和byte[] encodingParams
作爲最後兩個參數。這難倒了我,因爲我不知道如何獲得掩碼生成算法的實例,也不瞭解字節數組背後的用途,即encodingParams
。在下面的代碼中應該是arg3
和arg4
的值?如何正確使用Bouncy Castle的RSA(輕量級API)的OAEPEncoding
RSABlindedEngine rsa = new RSABlindedEngine();
SHA512Diges sha512 = new SHA512Digest();
Digest arg3 = ???;
byte[] arg4 = ???;
AsymmetricBlockCipher cipher = new OAEPEncoding(rsa, sha512, arg3, arg4);
謝謝。像往常一樣清晰簡潔。快速跟進問題,你知道是否重用Digest對象的同一個實例是個好主意嗎?現在我有三個獨立的實例:兩個傳入OAEPEncoding編碼構造函數,另一個傳遞給RSADigestSigner(用於簽名)。 – Andrey 2010-06-23 13:33:53
@ yamsha:它取決於Bouncy Castle的實現。他們以自然順序的順序來做事情是合理的,在這種情況下,重複使用相同的摘要將會正常工作。創建新的摘要實例的成本可以忽略不計,這同樣合理。爲了安全起見,我會推薦使用不同的實例。但是很可能兩種方式的影響都很小。 – 2010-06-23 15:23:50