2012-09-03 82 views
4

我想構建一箇中繼服務器,爲了P2P通信,可以在兩個對等體之間安全地中繼消息(針對nat遍歷的目的)。特別是,我參照document圖中關於密鑰交換的步驟.....java通過可信服務器交換公共密鑰

特別是,它說「用B的公鑰編碼的A的公鑰」,反之亦然。然而,我偶然發現了一個問題:當我使用兩個密鑰爲1024位時,實際上當我嘗試使用公鑰對其他密鑰進行編碼時,我得到了一個illegalblocksizeexception

閱讀其他問題,其中一些人回答說,公衆可以使用RSA加密的數據大小有限。我可否知道是否有一些細節可能會遺漏,在圖中省略,或者我做錯了什麼,試圖交換密鑰......

回答

1

RSA公共密鑰無法加密數據長於它們的模數的位長。因此,一個1024位的RSA公鑰只能加密最多1024位的數據。 1024位公鑰文件將大於1024位,因爲模數僅爲總數據的部分。因此,1024位RSA公鑰不能加密另一個1024位RSA公鑰。

更重要的是:你不應該用任何東西加密公鑰。公鑰就是這樣 - public;當涉及到內容時,不需要保密。如果您希望「保佑」公鑰適合某種特定用途,請用一些具有重要意義的私鑰對其進行簽名。或者更好的是,從您的協議的所有參與者信任的證書頒發機構爲公鑰頒發證書。