Java中RSA非对称密钥加解密使用示例
作者:网络转载 发布时间:[ 2012/9/7 11:44:36 ] 推荐标签:
3、B收到数据后,需要使用A提供的公钥信息进行验签,此处使用公钥的N、E进行验签
首先通过公钥N、E得到公钥PublicKey,如下:
/**
* 根据公钥n、e生成公钥
* @param modulus 公钥n串
* @param publicExponent 公钥e串
* @return 返回公钥PublicKey
* @throws Exception
*/
public static PublicKey getPublickKey(String modulus, String publicExponent)
throws Exception {
KeySpec publicKeySpec = new RSAPublicKeySpec(
new BigInteger(modulus, 16), new BigInteger(publicExponent, 16));
KeyFactory factory = KeyFactory.getInstance("RSA");
PublicKey publicKey = factory.generatePublic(publicKeySpec);
return publicKey;
}
得到公钥PublicKey后,再去验证签名,代码如下:
/**
* 用公钥证书进行验签
* @param message 签名之前的原文
* @param cipherText 签名
* @param pubKeyn 公钥n串
* @param pubKeye 公钥e串
* @return boolean 验签成功为true,失败为false
* @throws Exception
*/
public static boolean verify(String message, String cipherText,String pubKeyn,
String pubKeye) throws Exception {
Cipher c4 = Cipher.getInstance("RSA/ECB/PKCS1Padding");
// 根据密钥,对Cipher对象进行初始化,DECRYPT_MODE表示解密模式
c4.init(Cipher.DECRYPT_MODE, getPublickKey(pubKeyn,pubKeye));
// 解密
byte[] desDecTextBytes = c4.doFinal(Base64.base64ToByteArray(cipherText));
// 得到前置对原文进行的MD5
String md5Digest1 = Base64.byteArrayToBase64(desDecTextBytes);
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update(message.getBytes("utf-8"));
byte[] digestBytes = md5.digest();
// 得到商户对原文进行的MD5
String md5Digest2 = Base64.byteArrayToBase64(digestBytes);
// 验证签名
if (md5Digest1.equals(md5Digest2)) {
return true;
} else {
return false;
}
}
至此,签名验签已经完毕
4、提供一个从.cer文件读取公钥的方法:
/**
* 读取公钥cer
* @param path .cer文件的路径 如:c:/abc.cer
* @return base64后的公钥串
* @throws IOException
* @throws CertificateException
*/
public static String getPublicKey(String path) throws IOException,
CertificateException{
InputStream inStream = new FileInputStream(path);
ByteArrayOutputStream out = new ByteArrayOutputStream();
int ch;
String res = "";
while ((ch = inStream.read()) != -1) {
out.write(ch);
}
byte[] result = out.toByteArray();
res = Base64.byteArrayToBase64(result);
return res;
}
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11