同一段代码在不同的项目中加密的结果不一致。
经过排查,发现是字符集编码不一致。
获取需要加密的byte[]时指定字符集即可。
signature.update(source.getBytes("utf-8"));
public static String sign(String source, String keyFile) throws Exception {
InputStream in = null;
ClassLoader loader = YHRSAUtils.class.getClassLoader();
if (loader != null) {
in = loader.getResourceAsStream(keyFile);
}
if (in == null) {
in = ClassLoader.getSystemResourceAsStream(keyFile);
}
Base64 base64 = new Base64();
PrivateKey privateKey = null;
String sign = null;
try {
byte[] encodedKey = base64.decode(IOUtils.toByteArray(in));
KeySpec keySpec = new PKCS8EncodedKeySpec(encodedKey);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
privateKey = keyFactory.generatePrivate(keySpec);
} finally {
in.close();
}
if (privateKey != null) {
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initSign(privateKey);
signature.update(source.getBytes("utf-8"));
byte[] signed = signature.sign();
sign = base64.encodeToString(signed);
}
return sign;
}