重点:
1.加密内容/key转byte数组,用Base64工具;
2.获取私钥key,规则是 KeyFactory.getInstance("RSA", "BC");// 入参“BC”不可以省略;
3.解密的时候,规则是Cipher.getInstance("RSA/ECB/PKCS1Padding");
4.返回的byte数组,用new String(byte[]);打印
public void doSomething(String enContent) {
byte[] encryptContent = Base64.decode(enContent, Base64.DEFAULT);// enContent,加密内容。。。。务必用Base64解密
byte[] privateKeyContent = Base64.decode(privateKey, Base64.DEFAULT);//privateKey 私钥
byte[] bytes1 = decryptByPrivateKey(encryptContent, privateKeyContent);
String resultString = new String(bytes1);
int result = StringUtils.tranString2Int(resultString);
LogUtil.d(TAG,"Enter getVerifiyPercentage resultString : " + resultString);
LogUtil.d(TAG,"Enter getVerifiyPercentage result : " + result);
}
public static byte[] decryptByPrivateKey(byte[] encrypted, byte[] privateKey) {
// 得到私钥对象
byte[] arr = null;
try {
// 得到私钥
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKey);
KeyFactory kf = KeyFactory.getInstance("RSA", "BC");// 入参“BC”不可以省略
PrivateKey privateK = kf.generatePrivate(keySpec);
// 解密数据
Cipher cp = Cipher.getInstance("RSA/ECB/PKCS1Padding");// 与Java解密不一样
cp.init(Cipher.DECRYPT_MODE, privateK);
arr = cp.doFinal(encrypted);
} catch (Exception e) {
LogUtil.d(LoginPresenter.class, "decryptByPrivateKey Exception ");
e.printStackTrace();
}
return arr;
}
网友评论