gpt4 book ai didi

Java RSA 加密

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:52:23 24 4
gpt4 key购买 nike

我正在尝试来回编码一个简单的字符串“测试”。

public static String encode(Key publicKey, String data) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {

byte[] byteData = data.getBytes(); // convert string to byte array

Cipher cipher = Cipher.getInstance(ALGORITHM); // create conversion processing object
cipher.init(Cipher.ENCRYPT_MODE, publicKey); // initialize object's mode and key

byte[] encryptedByteData = cipher.doFinal(byteData); // use object for encryption

return new String(encryptedByteData); // convert encrypted byte array to string and return it

}

public static String decode(Key privateKey, String data) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {

byte[] byteData = data.getBytes(); // convert string to byte array

Cipher cipher = Cipher.getInstance(ALGORITHM); // create conversion processing object
cipher.init(Cipher.DECRYPT_MODE, privateKey); // initialize object's mode and key

System.out.println(byteData.length);

byte[] decryptedByteData = cipher.doFinal(byteData); // use object for decryption

return new String(decryptedByteData); // convert decrypted byte array to string and return it

}

但是,尽管加密工作正常(ALGORITHM 是“RSA”),但在尝试解密我刚刚从加密“test”中获得的字符串时,出现以下异常:

javax.crypto.IllegalBlockSizeException: Data must not be longer than 256 bytes

我应该将加密的字节分成 256 个 block 以便能够解密吗?

最佳答案

您无法可靠地将随机字节转换为 String。结果将取决于您运行它的机器上的默认字符编码。使用多种编码,密文将被破坏,信息将丢失。

修改您的代码以使用 byte[] 代替(“doFinal()”方法的结果。

如果您需要将byte[] 转换为字符串,请使用Base-64 等编码。

关于Java RSA 加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6077507/

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