我正在嘗試實現PKI。我想用java中的RSA加密大字符串而不使用彈性城堡。我得到的問題是數據不能超過117個字節。我試圖尋找失敗的解決方案。我是這個加密的新手。請給我一個大字符串作爲例子並解釋它。使用RSA在java中加密和解密大字符串
回答
一次不能使用超過約128個字節的RSA加密解密。你必須拆分數據,並在循環中完成,幾乎將字節寫入String/Array。如果你唯一的問題是數據的大小,你可能沒有更多的要去。只是分割數據。
一個很好的例子,可能是更完整的你,擁有超過128個字節的字符串處理:http://coding.westreicher.org/?p=23
如果您需要在一般的RSA加密的詳細解釋:
下面的代碼演示瞭如何使用的KeyPairGenerator生成RSA密鑰對在Java中:
// Get an instance of the RSA key generator
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
// Generate the keys — might take sometime on slow computers
KeyPair myPair = kpg.generateKeyPair();
這會給你一個KeyPair對象,它擁有兩個密鑰:一個私鑰和一個公佈我知道了。爲了使用這些密鑰,您需要創建一個Cipher對象,該對象將與SealedObject結合使用來加密您將通過網絡結束的數據。這裏是你如何做到這一點:
// Get an instance of the Cipher for RSA encryption/decryption
Cipher c = Cipher.getInstance("RSA");
// Initiate the Cipher, telling it that it is going to Encrypt, giving it the public key
c.init(Cipher.ENCRYPT_MODE, myPair.getPublic());
初始化密碼後,我們就可以對數據進行加密。因爲在加密後,如果你看到它們是「裸體」的,所得到的數據沒有什麼意義,我們必須將它們封裝在另一個對象中。 Java通過SealedObject類提供了這一點。 SealedObjects是加密對象的容器,它使用Cipher對象加密和解密其內容。
下面的示例示出了如何創建和加密SealedObject的內容:
// Create a secret message
String myMessage = new String("Secret Message");
// Encrypt that message using a new SealedObject and the Cipher we created before
SealedObject myEncryptedMessage= new SealedObject(myMessage, c);
產生的對象可以通過網絡,而不用擔心被髮送,因爲它是加密的。唯一可以解密和獲取數據的人是擁有私鑰的人。通常,這應該是服務器。爲了解密消息,我們需要重新初始化Cipher對象,但這次使用不同的模式解密,並使用私鑰而不是公鑰。
這是你如何在Java中做到這一點:
// Get an instance of the Cipher for RSA encryption/decryption
Cipher dec = Cipher.getInstance("RSA");
// Initiate the Cipher, telling it that it is going to Decrypt, giving it the private key
dec.init(Cipher.DECRYPT_MODE, myPair.getPrivate());
現在,密碼已準備好解密,我們必須告訴SealedObject解密所保持的數據。使用getObject方法時
// Tell the SealedObject we created before to decrypt the data and return it
String message = (String) myEncryptedMessage.getObject(dec);
System.out.println("foo = "+message);
當心,因爲它返回一個對象(即使它實際上是String的實例),而不是類,這是加密前的一個實例的實例,讓你」必須將其轉換爲之前的形式。
以上是從:http://andreas.louca.org/2008/03/20/java-rsa-encryption-an-example/
RSA不用於大量數據加密。相反,使用對稱密碼(如AES)來加密「大字符串」。然後,用RSA密鑰加密用於AES的對稱密鑰。
BouncyCastle支持兩種協議:S/MIME和PGP。所有合理的隱私協議都以這種方式使用非對稱算法進行密鑰傳輸或密鑰交換。
可以使用RSA加密的消息大小取決於密鑰的模數,減少了安全填充消息所需的一些字節數。
像這樣的混合加密是要走的路。 – CodesInChaos
代碼示例或相關API的鏈接不會受到影響。 – CodesInChaos
- 1. RSA字符串加密\解密
- 2. 使用RSA加密長字符串(Java)
- 3. RSA加密用Java/.NET和解密.NET
- 4. 使用Java的RSA加密/解密
- 5. Java不可靠的RSA加密/解密字符串
- 6. Java RSA加密 - 解密.NET
- 7. RSA .NET加密Java解密
- 8. 使用RSA公鑰解密使用RSA私鑰加密的字符串
- 9. 使用RSA公鑰來解密使用RSA被加密的字符串私鑰
- 10. .Net RSA加密,Java RSA解密
- 11. RSA算法如何加密和解密字符串文本?
- 12. 在JavaScript中加密字符串並使用RSA技術在PHP中解密
- 13. RAW RSA使用Crypto ++加密和解密
- 14. RSA加密和解密使用X509certificate2
- 15. 加密和解密使用RSA OAEP
- 16. 使用RSA公鑰加密字符串
- 17. 在javascript中加密字符串和在java中解密
- 18. 使用RSA解密Base64加密字符串後的垃圾值java
- 19. 在JAVA中使用公共和私有RSA密鑰進行加密和解密
- 20. RSA加密/解密
- 21. 在java中加密和解密字符串
- 22. Java中的字符串的密鑰RSA
- 23. 如何在使用JS加密技術加密的Java字符串中解密
- 24. Swift - 使用用戶密碼加密和解密字符串
- 25. RSA解密加密++在PHP
- 26. 解密字符串加密
- 27. 加密/解密字符串
- 28. 加密和解密與RSA的文字和DES3鑰匙串
- 29. 使用特殊字符加密和解密字符串
- 30. Java:使用RSA私鑰(Xml簽名)解密字符串
安全性,尤其是密碼學,**很難**。您應該使用現有的高級包而不是原始加密API,或者瞭解其工作原理的詳細信息。否則,你可能會編寫不安全的代碼。 – SLaks
高級包意味着什麼? –
請發佈您的代碼。我們可以從那裏工作。 – Frank