gpt4 book ai didi

java - 在C中使用私钥加密数据,在Java中使用公钥解密数据

转载 作者:行者123 更新时间:2023-11-30 08:17:13 25 4
gpt4 key购买 nike

我有一个用例,我想在 C 中使用私钥加密一些数据,并在 java 中使用公钥解密。

我使用 openssl 生成了公钥/私钥。我能够运行一个 c 代码来使用私钥加密数据。

类似于下面的代码:

#include <openssl/pem.h>
#include <openssl/ssl.h>
#include <openssl/rsa.h>
#include <openssl/evp.h>
#include <openssl/bio.h>
#include <openssl/err.h>

int padding = RSA_PKCS1_PADDING;

char * data;
char *encrypted;

FILE * fp = fopen(<private_key_file>,"rb");
RSA *rsa= RSA_new() ;
rsa = PEM_read_RSAPrivateKey(fp, &rsa,NULL, NULL);
RSA_private_encrypt(data_len,data,encrypted,rsa,padding);

这很好用,我也可以使用 C 中的公钥对其进行解密。我无法使用 Java 中的公钥对其进行解密。为此,我将公钥转换为 DER 格式: $ openssl rsa -in private_key.pem -pubout -outform DER -out public_key.der

我正在使用以下代码

public String decrypt(byte[] encrypted) throws Exception
{
Cipher cipher = Cipher.getInstance("RSA");

KeyFactory kf = KeyFactory.getInstance("RSA");

byte[] encKey = readFromFile(PUBLIC_KEY_FILE, false);

X509EncodedKeySpec ks = new X509EncodedKeySpec(encKey);

PublicKey pk = kf.generatePublic(ks);

cipher.init(Cipher.DECRYPT_MODE, pk);

byte[] plainText = cipher.doFinal(encrypted);

return new String(plainText,"UTF-8");
}

我的 java 代码出现以下异常。

Exception in thread "main" javax.crypto.BadPaddingException: Decryption error
at sun.security.rsa.RSAPadding.unpadV15(RSAPadding.java:380)
at sun.security.rsa.RSAPadding.unpad(RSAPadding.java:291)
at com.sun.crypto.provider.RSACipher.doFinal(RSACipher.java:356)
at com.sun.crypto.provider.RSACipher.engineDoFinal(RSACipher.java:389)
at javax.crypto.Cipher.doFinal(Cipher.java:2121)
at AssyncKeyEncryptTest.decrypt(AssyncKeyEncryptTest.java:198)
at AssyncKeyEncryptTest.test(AssyncKeyEncryptTest.java:45)
at AssyncKeyEncryptTest.main(AssyncKeyEncryptTest.java:32)

有人可以帮我解决在 java 中使用公钥解密数据的错误吗?

最佳答案

堆栈跟踪表明加密和解密之间存在不同的填充。

在加密时尝试使用“PKCS1Padding”作为解密实例。

关于java - 在C中使用私钥加密数据,在Java中使用公钥解密数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27963084/

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