gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:06:03 24 4
gpt4 key购买 nike

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

运行 ChatClient.java - 显示用户输入用户名的对话框。然后生成私钥和公钥并存储在C:/username/publickey,C:/username/privatekey中。

当我们再次运行 ChatClient.java 时,会重复上述步骤。

然后用户1使用用户2公钥以加密形式向用户2发送消息(工作正常)(加密后,消息存储在文本文件中)然后用户2单击解密按钮解密文本(从文件中读取加密文本)使用用户 2 私钥然后显示在文本区域中。

当我尝试解密时,出现“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);
}

最佳答案

下面突出显示的代码表示 test90 仅包含 cipher.txt 文件中的最后一行。 cipher.txt 仅包含 1 行吗?如果您想读入所有内容,则需要在读入时连接每一行。

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

decrypt 方法中 System.out 变量 test90 也是一个好主意,以确保您获得预计 Base64 数据将被解密。

关于java - 启用 RSA 的简单 Java 聊天 - 不是 PKCS#1 block 类型 2 或零填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23259947/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com