A place to hold mainly reading notes, and some technical stuff occasionally. 这里主要是一些读书笔记、感悟;还有部分技术相关的内容。
目录[-]
我们系统对系统的用户名与密码进行了 RSA
加密传输,一开始出现的问题是:
public static String decrypt(String str, String privateKey) {
try {
//64位解码加密后的字符串
byte[] inputByte = Base64.decodeBase64(str.getBytes("UTF-8"));
//base64编码的私钥
byte[] decoded = Base64.decodeBase64(privateKey);
RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded));
//RSA解密
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, priKey);
String outStr = new String(cipher.doFinal(inputByte));
return outStr;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static String decrypt(String str, String privateKey) {
try {
//64位解码加密后的字符串
byte[] inputByte = Base64.decodeBase64(str.getBytes(StandardCharsets.UTF_8));
//base64编码的私钥
byte[] decoded = Base64.decodeBase64(privateKey);
RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded));
//RSA解密
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, priKey);
return new String(cipher.doFinal(inputByte), StandardCharsets.UTF_8);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
关键是解密返回前的这行代码: String outStr = new String(cipher.doFinal(inputByte));return outStr;
改为了 return new String(cipher.doFinal(inputByte), StandardCharsets.UTF_8);
;即在解密时的编码一定要指定字符集 UTF-8
,否则会导致在不同的服务器操作系统环境下解密编码的不确定性。
If you have any questions or any bugs are found, please feel free to contact me.
Your comments and suggestions are welcome!