资源简介
RSAUtil工具类
代码片段和文件信息
package com.chinaums.utils;
import org.apache.commons.codec.binary.base64;
import javax.crypto.Cipher;
import java.security.*;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.HashMap;
import java.util.Map;
/**
* RSA工具类
*/
public class RSAUtil {
public static final String KEY_ALGORITHM = “RSA“;
public static final String SIGNATURE_ALGORITHM = “MD5withRSA“;
private static final String PUBLIC_KEY = “RSAPublicKey“;
private static final String PRIVATE_KEY = “RSAPrivateKey“;
public static byte[] decryptbase64(String key) {
return base64.decodebase64(key);
}
public static String encryptbase64(byte[] bytes) {
return base64.encodebase64String(bytes);
}
public static String sign(byte[] data String privateKey) throws Exception {
// 解密由base64编码的私钥
byte[] keyBytes = decryptbase64(privateKey);
// 构造PKCS8EncodedKeySpec对象
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
// KEY_ALGORITHM 指定的加密算法
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
// 取私钥匙对象
PrivateKey priKey = keyFactory.generatePrivate(pkcs8KeySpec);
// 用私钥对信息生成数字签名
Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
signature.initSign(priKey);
signature.update(data);
return encryptbase64(signature.sign());
}
public static boolean verify(byte[] data String publicKey String sign) throws Exception {
// 解密由base64编码的公钥
byte[] keyBytes = decryptbase64(publicKey);
// 构造X509EncodedKeySpec对象
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
// KEY_ALGORITHM 指定的加密算法
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
// 取公钥匙对象
PublicKey pubKey = keyFactory.generatePublic(keySpec);
Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
signature.initVerify(pubKey); signature.update(data);
// 验证签名是否正常
return signature.verify(decryptbase64(sign));
}
public static byte[] decryptByPrivateKey(byte[] data String key) throws Exception{
// 对密钥解密
byte[] keyBytes = decryptbase64(key);
// 取得私钥
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
Key privateKey = keyFactory.generatePrivate(pkcs8KeySpec);
// 对数据解密
Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
cipher.init(Cipher.DECRYPT_MODE privateKey);
return cipher.doFinal(data);
- 上一篇:java语言程序设计1-10章课后答案代码
- 下一篇:socket传输字节和字符串
评论
共有 条评论