使用RSA在java中加密和解密大字符串

我正在努力实施PKI.我想使用RSA加密大字符串,而不使用弹性城堡.问题我得到的是数据不能超过117个字节.我试图为我失败的解决方案进行搜索.我是这个加密的新手.请以大字符串为例,帮助我解释一下.
最佳答案
您不能一次使用超过约128个字节的RSA加密解密.您必须分割数据,并在循环中执行它几乎写入String / Array的字节.如果你唯一的问题是数据的大小,你可能没有太多的事要去.只是分割数据.

一个很好的例子,可能对你来说更完整,处理大于128字节的字符串:http://coding.westreicher.org/?p=23

如果您需要更多关于RSA加密的解释:

以下代码演示了如何使用KeyPairGenerator在Java中生成RSA密钥对:

// 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解密所保存的数据.

// Tell the SealedObject we created before to decrypt the data and return it
String message = (String) myEncryptedMessage.getObject(dec);
System.out.println("foo = "+message);

使用getObject方法时,请注意,因为它返回一个Object的实例(即使它实际上是一个String的实例),而不是加密之前的Class的一个实例,所以你必须将其转换为先前的形式.

以上是从:http://andreas.louca.org/2008/03/20/java-rsa-encryption-an-example/

转载注明原文:使用RSA在java中加密和解密大字符串 - 代码日志