gpt4 book ai didi

java - 尝试加密过多数据时获取 IllegalBlockSize

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

这是我的常量

//Encryption fields
/** Algorithm=RSA Mode=ECB Padding=PKCS1Padding*/
public static final String ALGORITHM_MODE_PADDING = "RSA/ECB/PKCS1Padding";
/** Algorithm=RSA */
public static final String ALGORITHM = "RSA";
/** Provider=BouncyCastle */
public static final String PROVIDER = "BC";
/** Key size for the public and private keys */
public static final int KEY_SIZE = 1024;

我已经制作了两个公钥/私钥,如下所示:

//Generate the keys
KeyPairGenerator kpg = KeyPairGenerator.getInstance(ALGORITHM,PROVIDER);
kpg.initialize(KEY_SIZE);
KeyPair kp = kpg.generateKeyPair();
PublicKey pubk = kp.getPublic();
PrivateKey prvk = kp.getPrivate();

我是这样解密的:

byte[] privateKey = Base64.decodeBase64(pKey); //decode
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKey);
KeyFactory factory = KeyFactory.getInstance(ALGORITHM,PROVIDER);
PrivateKey privKey = factory.generatePrivate(keySpec);
Cipher cipher = Cipher.getInstance(ALGORITHM_MODE_PADDING);
cipher.init(Cipher.ENCRYPT_MODE, privKey);
return cipher.doFinal(data);

这适用于少量数据,当数据变大(例如263 字节)时,如果失败并出现 IllegalBlockSizeException。我认为这是因为数据大于 256 字节,但这只是猜测,我不知道如何修复它。

我做错了什么?

我改成使用更新方法,但仍然有同样的问题:

// encryption pass
cipher.init(Cipher.ENCRYPT_MODE, privKey);
byte[] cipherText = new byte[cipher.getOutputSize(data.length)];
int ctLength = cipher.update(data, 0, data.length, cipherText, 0);
ctLength += cipher.doFinal(cipherText, ctLength);

顺便说一下,我正在尝试实现数字签名。客户端有公钥,服务器有私钥。

最佳答案

使用 RSA 加密的数据不能多于模数 - 11 的字节大小。 This可能就是您正在寻找的。

关于java - 尝试加密过多数据时获取 IllegalBlockSize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3165638/

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