当前位置: 首页 > 知识库问答 >
问题:

启用RSA的简单Java聊天-不是PKCS#1阻止类型2或零填充

袁华清
2023-03-14

我创建了一个简单的java聊天应用程序。以下是以下内容

当我尝试解密时,我得到“not PKCS#1 block type 2 or Zero padding”异常

public static byte[] encrypt(String text, PublicKey key) throws {
    // get an RSA cipher object and print the provider
    final Cipher cipher = Cipher.getInstance(ALGORITHM);
    // encrypt the plain text using the public key
    cipher.init(Cipher.ENCRYPT_MODE, key);
    byte[] cipherText = cipher.doFinal(text.getBytes("UTF8"));
    return org.apache.commons.codec.binary.Base64.encodeBase64(cipherText);
}

public static String decrypt(String text, PrivateKey key) throws  {
    byte[] dectyptedText = null;

      // get an RSA cipher object and print the provider
      final Cipher cipher = Cipher.getInstance(ALGORITHM);

      // decrypt the text using the private key
     cipher.init(Cipher.DECRYPT_MODE, key);
     byte[] byteCipherText =org.apache.commons.codec.binary.Base64.decodeBase64(text): 
     byte[] cipherData = cipher.doFinal(byteCipherText);
     return new String(dectyptedText);  
}

private void btnDecryptActionPerformed(ActionEvent evt) throws  {
    String name11 = this.getTitle();
    String test90 = null;
    String PRIVATE_KEY_FILE = "C:/keys/"+name11+"/private.key";
    BufferedReader in = null;
    try {
        in = new BufferedReader(new FileReader("cipher.txt"));
    } catch (FileNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    try {
        while(in.ready())
        {
            String stest= in.readLine();
            test90 = stest;


        }
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    ObjectInputStream inputStream = null;
    try {
    inputStream = new ObjectInputStream(new FileInputStream(PRIVATE_KEY_FILE));
    } catch (FileNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    PrivateKey privateKey = null;
    try {
        privateKey = (PrivateKey) inputStream.readObject();
    } catch (ClassNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    try {
    inputStream = new ObjectInputStream(new FileInputStream(PRIVATE_KEY_FILE));
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    try {
        PrivateKey privatekey = (PrivateKey) inputStream.readObject();
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 
    String plainText;

//  byte[] test100 = test90.getBytes();
//  out.println(test100);
    plainText = decrypt(test90, privateKey); (Getting Error Here)
    decryptText.append(plainText);
} 

共有1个答案

竺和洽
2023-03-14

下面突出显示的代码表示test90只包含cipher.txt文件中的最后一行。cipher.txt只包含1行吗?如果你想把每一行都读进去,你需要在读进去的时候把每一行串联起来。

while(in.ready())
{
    String stest= in.readLine();
    test90 = stest;
}

decrypt方法中system.out变量test90也是一个好主意,以确保您得到的是要解密的预期base64数据

 类似资料:
  • 用例:I有一个用例,其中客户机生成私钥和公钥,将64位编码的公钥发送给服务器。 在服务器端,我将使用此公钥加密消息,并将加密的消息发送到客户端,客户端使用其私钥对其进行解密。商定的算法是“RSA”。 问题是在服务器端,我看到某些密钥正在使用作为密钥规范工作 虽然一些键抛出异常()使用但使用工作: 所以,我开始理解的是,客户端和服务器需要同意是否使用:或来编码密钥。我的问题是哪一个更适合我的用例?什

  • 我正在用JMS制作一个简单的聊天应用程序,但我的代码不起作用,我不知道为什么。这是我的代码,我与JBoss一起使用,所以我打开pub并编写了这段代码,当我单击启动Eclipse时,给我以下错误消息:

  • 本文向大家介绍Android编写简单的聊天室应用,包括了Android编写简单的聊天室应用的使用技巧和注意事项,需要的朋友参考一下 最近写了一个简单的聊天室应用,可以发送表情,更改头像这些功能。主要技术点就是怎样把表情图片放到textview等Ui控件中展示。这里废话不多说,下面是效果图:  这里主要讲下怎样把文本替换到表情,先说下思路,首先我们的图片是保存在本地资源目录drawable中而所有的

  • 本文向大家介绍Node.js制作简单聊天室,包括了Node.js制作简单聊天室的使用技巧和注意事项,需要的朋友参考一下 看了TCP的有关知识,写了个基于NET的聊天室。 运行截图: 终端: telnet 这里截取了两个网友 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 我正试图通过电报聊天发送消息。我希望电报设置只能通过官方用户界面完成,因为我希望它可能由最终用户完成。 以下是我所做的电报设置: 我通过获得令牌创建了机器人 我创建了一个通道: 点击"新频道" 通道名称: 点击下一步 选择私人频道 点击保存 添加我的机器人 点击制作管理员 点击保存 打开频道 在频道菜单上,选择“管理频道” 单击讨论中的“添加组” 单击“创建新组” 组名: 单击“创建” 单击“保存

  • 本文向大家介绍java Socket简易聊天工具,包括了java Socket简易聊天工具的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了一款Socket简易聊天工具,希望大家喜欢。 代码运行如图,看起来还不错 服务端 客户端 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。