Rsa
為什麼 RSA 庫會告訴我公鑰的大小必須至少為 512 位?
我正在嘗試通過對其進行逆向工程來與 Web 服務進行互操作。目前,在發送 POST 請求時,它會使用 ‘RSA’ 函式對錶單數據進行一一加密。但這很奇怪,因為我嘗試使用這些值的其他地方都給了我錯誤。它正在使用這個庫:https ://code.google.com/p/pajhome/source/browse/trunk/crypt/md5/rsa/RSA.js?r=133 像這樣:
var crypto = new RSAKeyPair( "9d7aa162117a8a9610ed2ddea713d7b", "", "c9869917572adbb60a2c30ddec2551f")
我只知道一點 RSA,但如果我是對的,這應該是帶有 (e,m) 的公鑰。但是當嘗試在 Java 中使用它時,我收到錯誤消息,說 RSA 公鑰的大小必須至少為 512 位。我的錯誤在這裡發生在哪裡?
BigInteger e = new BigInteger("3855b21eba4eb9a8a88117878e1fda49", 16); BigInteger m = new BigInteger("ac5d160611804794d3e0240f2042b919", 16); RSAPublicKeySpec spec = new RSAPublicKeySpec(e, m); KeyFactory keyFact = KeyFactory.getInstance("RSA"); PublicKey publicKey = keyFact.generatePublic(spec);
在我的設置中, (e,m) 是 (13082845549543033994073971762152947067, 229110545576645850236522690668306544921) 十進制 (?!?!)
您連結到的 javascript 庫對密鑰大小沒有限制。許多實現 RSA 的庫都會對密鑰大小有限制。這是為了確保開發人員遵循最佳實踐,就好像密鑰太小,密碼的安全性完全被破壞一樣。看起來您正在使用的 Java 庫不允許您使用小於 512 位的密鑰大小(這仍然太小,即使 RSA 的 1024 位也不再推薦用於長期安全性)。
如果您刪除對 512 位的檢查,那應該會處理該錯誤。
最後的想法
我認為應該再次指出 512 位 RSA 密鑰太小了。由於您將與不安全的東西進行互操作,因此您需要考慮這對系統的安全性意味著什麼。您將無法更改 Web 服務正在執行的操作,但您仍然需要考慮它如何影響系統的安全性。