当前位置: 首页 > 面试题库 >

使用RSA加密和解密Java中的大字符串

龙佐
2023-03-14
问题内容

我正在尝试实施PKI。我想在Java中使用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());

初始化密码后,我们就可以加密数据了。由于在加密之后,如果您看到的是“裸露”的结果数据就没有多大意义,因此我们必须将它们封装在另一个Object中。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/



 类似资料:
  • 文件解密后,输出包含一些不相关的额外值。为什么结果中有额外的数据?

  • 我使用的是Web加密,更具体地说,这些示例是:https://github.com/diafygi/webcrypto-examples/#rsa-oaep 更新

  • 问题内容: 我是密码学的新手。我希望学习如何在文件中加密和解密文本……当我在net中引用相关文章时。我怀疑对同一文本进行多次加密后,单个文本的加密文本是否会相同?谁能解决我的疑问? 问题答案: 这是使用该类的示例:

  • 我正在尝试使用java对用户电子邮件id进行RSA加密,并尝试使用php进行解密。但我没有成功。以下是详细信息 java中的源代码: 私钥: RSA 加密输出: 和Bas64编码输出: php解密代码 php输出返回none。。。

  • 我正在做一个简单的程序来加密/解密使用RSA算法在Java。我创建一个密码对象如下: 我通过调用加密函数进行加密: 解密过程如下: 但是,当我将创建密码对象的代码编辑为://Create a Cipher object Cipher rsapier=Cipher时。getInstance(“RSA”); 问题出在哪里。在第一种情况下(当空格出现时),我指定了NoPadd?为什么空格出现在解密的消息