我正在使用 BouncycaSTLe 的 RSA 实现。我得到一个具有以下选项的密码实例,
"RSA/ECB/PKCS1Padding"
我的问题是如何选择要使用的填充?以及我可以加密的最大数据量是多少? AFAIK RSA 有一个限制。我也找不到 ECB 代表什么?
最佳答案
在 rsa 中,加密模式被忽略。如果您有大量数据需要加密,请自行计算 block 数,下面的示例可能会对您有所帮助:
byte[] var21;
try {
Cipher cp = Cipher.getInstance("RSA/ECB/PKCS1Padding", new BouncyCastleProvider());
cp.init(mode, key);
int blockSize = cp.getBlockSize();
int blocksNum = (int) Math.ceil((double) data.length / (double) blockSize);
int calcSize = blockSize;
Object buffer = null;
outputStream = new ByteArrayOutputStream();
for (int i = 0; i < blocksNum; ++i) {
if (i == blocksNum - 1) {
calcSize = data.length - i * blockSize;
}
byte[] var22 = cp.doFinal(data, i * blockSize, calcSize);
try {
outputStream.write(var22);
} catch (IOException var19) {
throw new GeneralSecurityException("RSA error", var19);
}
}
var21 = outputStream.toByteArray();
} finally {
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException var18) {
;
}
}
}
关于java - BouncycaSTLe RSA key 大小和填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11717646/