您现在的位置是:首页>技术分享>RSA加密解密报错Data must not be longer than 117 bytes
RSA加密解密报错Data must not be longer than 117 bytes
发布时间:2019-04-10 编辑:小付 浏览(1135) 评论(0)
/**
* 公钥加密方法
*
* @param source 源数据
* @return
* @throws Exception
*/
private static String encrypt(String source) throws Exception {
Key publicKey;
ObjectInputStream ois = null;
try {
/** 将文件中的公钥对象读出 */
ois = new ObjectInputStream(
new FileInputStream(
new File("publickey").getAbsolutePath()
+"/pubkey.cer"
)
);
publicKey = (Key) ois.readObject();
} catch (Exception e) {
throw e;
} finally {
ois.close();
}
/** 得到Cipher对象来实现对源数据的RSA加密 */
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] b = source.getBytes();
/** 执行加密操作 */
byte[] enBytes = null;
if (b.length>117) {
for (int i = 0; i < b.length; i += 64) {
// 注意要使用2的倍数,否则会出现加密后的内容再解密时为乱码
byte[] doFinal = cipher.doFinal(ArrayUtils.subarray(b,i,i+64));
enBytes = ArrayUtils.addAll(enBytes, doFinal);
}
} else {
enBytes = cipher.doFinal(b);
}
return Base64.encodeToString(enBytes);
}注意这段:
for (int i = 0; i < b.length; i += 64) {
// 注意要使用2的倍数,否则会出现加密后的内容再解密时为乱码
byte[] doFinal = cipher.doFinal(ArrayUtils.subarray(b, i,i + 64));
enBytes = ArrayUtils.addAll(enBytes, doFinal);
}关键字词:RSA加密,117 bytes,Data must not be longer than 117 bytes