public String encrypt(String publicKeystore, String plainText) {
try {
FileReader fr = new FileReader(publicKeystore);
BufferedReader br = new BufferedReader(fr);
String publicKeyString = "";
String str;
while ((str = br.readLine()) != null) {
publicKeyString += str;
}
br.close();
fr.close();
// 每次操作都要init,频繁的操作会造成报错,其实这里只要在初始化的构造函数里,init就可以解决报错的问题。
//cipher.init(Cipher.ENCRYPT_MODE, getPublicKey(publicKeyString));
//byte[] enBytes = cipher.doFinal(plainText.getBytes());
//return (new BASE64Encoder()).encode(enBytes).replaceAll("\r\n", "");
// 解决超过117个字符出错的问题
byte[] enBytes = null;
// StringBuilder sb = new StringBuilder();
for (int i = 0; i < plainText.getBytes().length; i += 64) {
byte[] doFinal = cipher.doFinal(ArrayUtils.subarray(plainText.getBytes(), i, i + 64));
// sb.append(new String(doFinal));
enBytes = ArrayUtils.addAll(enBytes, doFinal);
}
return (new BASE64Encoder()).encode(enBytes).replaceAll("\r\n", "");
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
try {
FileReader fr = new FileReader(publicKeystore);
BufferedReader br = new BufferedReader(fr);
String publicKeyString = "";
String str;
while ((str = br.readLine()) != null) {
publicKeyString += str;
}
br.close();
fr.close();
// 每次操作都要init,频繁的操作会造成报错,其实这里只要在初始化的构造函数里,init就可以解决报错的问题。
//cipher.init(Cipher.ENCRYPT_MODE, getPublicKey(publicKeyString));
//byte[] enBytes = cipher.doFinal(plainText.getBytes());
//return (new BASE64Encoder()).encode(enBytes).replaceAll("\r\n", "");
// 解决超过117个字符出错的问题
byte[] enBytes = null;
// StringBuilder sb = new StringBuilder();
for (int i = 0; i < plainText.getBytes().length; i += 64) {
byte[] doFinal = cipher.doFinal(ArrayUtils.subarray(plainText.getBytes(), i, i + 64));
// sb.append(new String(doFinal));
enBytes = ArrayUtils.addAll(enBytes, doFinal);
}
return (new BASE64Encoder()).encode(enBytes).replaceAll("\r\n", "");
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
Java加密算法实现:基于公钥的字符串加密与Base64编码
本文介绍了一种使用Java实现的公钥加密技术,通过读取公钥文件并对其进行加密处理,最终将加密后的数据转换为Base64编码形式,以解决超过117个字符的输出限制问题。文中详细阐述了加密流程,包括读取公钥、执行加密操作以及Base64编码的实现细节。
1786

被折叠的 条评论
为什么被折叠?



