gpt4 book ai didi

java - 需要 RSA 加密方面的帮助

转载 作者:行者123 更新时间:2023-12-01 15:25:36 25 4
gpt4 key购买 nike

我在下面的代码中遇到问题。
我为 RSA 创建了两个方法 ENCRYPTDECRYPT。为了获取公钥和私钥,我使用 keyGeneratorKeyPair 来生成 key 。我们的前辈告诉我,KeyPair应该在我们使用它的地方调用,它不应该在方法之前声明。

我尝试为 key 生成创建单独的方法,但是当我在两种方法( ENCRYPTDECRYPT )中调用该方法时,它将生成两个不同的 key 不匹配,因此解密不起作用。

我被告知要创建构造函数,然后在方法中调用它。我不知道如何准确地调用它以及它如何工作。

请查看下面的代码并帮助我。谢谢。

public class Encryption

{

static byte[] encrypted;
public Encryption() throws NoSuchAlgorithmException, NoSuchProviderException
{
KeyPair keypair;
KeyPairGenerator keygenerator = KeyPairGenerator.getInstance("RSA");
SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");
keygenerator.initialize(1024, random);
keypair = keygenerator.generateKeyPair();
}

public String ENCRYPT(String Algorithm, String Data ) throws Exception
{
String alg = Algorithm;
String data=Data;
if(alg.equals("RSA"))
{
stack enc=new stack();
//Don't know how to call constructor here
PublicKey publicKey = keypair.getPublic();
Cipher cipher;
cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
encrypted = cipher.doFinal(data.getBytes());
System.out.println("Encrypted String -> " + asHex(encrypted));
}

return asHex(encrypted);
}
public String DECRYPT(String Algorithm, String Data ) throws Exception
{
String alg = Algorithm;
String Decrypted="";
if(alg.equals("RSA"))
{
//have to call constructor here to get keypair value
PrivateKey privateKey = keypair.getPrivate();
Cipher cipher;
cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] dec = cipher.doFinal(encrypted);
Decrypted=new String(dec);
System.out.println("Decrypted String[RSA] -> " + Decrypted);

}

return Decrypted.toString();
}
public static String asHex (byte buf[])
{
StringBuffer strbuf = new StringBuffer(buf.length * 2);
int i;
for (i = 0; i < buf.length; i++)
{
if (((int) buf[i] & 0xff) < 0x10)
strbuf.append("0");
strbuf.append(Long.toString((int) buf[i] & 0xff, 16));
}

return strbuf.toString();
}

}

最佳答案

您希望keypair成为私有(private)字段:

private KeyPair keypair;

在构造函数中初始化。初始化正是您已经拥有的:

keypair = keygenerator.generateKeyPair();

不要在构造函数中将其声明为局部变量。

关于java - 需要 RSA 加密方面的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10202096/

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