阅读目录:
import javax.crypto.Cipher; import java.io.*; import java.security.*; import java.util.Base64; /** * @author: mmzsit * @date: 2018年10月24日 * @Description: * 博客地址:https://blog.mmzsblog.cn * @version V1.0 */public class EncryptUtil { public static void main(String[] args) { ObjectInputStream inputStream = null; //参数字符串 String userName="测试test0->1"; String orderId="测试ID123456"; String price="666"; //构建用于签名和传输的字符串 StringBuffer bufferStr =new StringBuffer(); bufferStr.append("userName=").append(userName) .append("&orderId=").append(orderId) .append("&price=").append(price); //将构建的字符串转化为String类型 String localStr =bufferStr.toString(); //签名算法加密 try { //随机生成秘钥对 // 检查是否存在这对密钥,否则生成这些密钥 if (!areKeysPresent()) { // 使用RSA算法生成一对密钥,并存储在指定路径的指定文件中 generateKey(); } //服务端数字签名开始 //第一步:用SHA-1算出原文的摘要 byte[] shaDigest = shaEncrypt(localStr); System.out.println("原文本内容:\n"+localStr); String shaStr = new String(shaDigest,"UTF-8"); System.out.println("原文本内容SHA-1算法后:\n"+shaStr); //第二步:使用私钥对原文进行加密 //读取文件中的私钥 inputStream = new ObjectInputStream(new FileInputStream(PRIVATE_KEY_FILE)); final PrivateKey privateKey = (PrivateKey) inputStream.readObject(); //使用私钥加密 byte[] rsaBytes = rsaEncrypt(shaDigest,privateKey); //第三步:对密文进行BASE64编码 byte[] base64Str = Base64.getEncoder().encode(rsaBytes); String base64enCode=new String(base64Str,"UTF-8"); System.out.println("加密后的内容:\n"+base64enCode); //签名加密完成数据传输到客户端 //客户端验证签名开始 //获取原文 String receiveStr=localStr; //第一步:使用Base64解码密文 byte[] bese64Decoded =Base64.getDecoder().decode(base64enCode.getBytes("UTF-8")); //第二步:使用公钥对密文进行解码
