接口传输数据加密、解密、加签、验签(AES,RSA,Sign)
接口传输数据加密、解密、加签、验签(AES,RSA,Sign)
理解公钥与私钥:https://songlee24.github.io/2015/05/03/public-key-and-private-key/
Demo
public static void testCert() { RSA rsa = new RSA(); String publicKey = rsa.getPublicKeyBase64(); String privateKey = rsa.getPrivateKeyBase64(); /* 加密 */ // 传输的数据 String data = "data"; // 加密的 key String key = RandomUtil.randomNumbers(16); // 根据生成的key构造 AES 加密算法(个人理解,key就像一把钥匙,解密的时候要用这把钥匙) AES aes = new AES(Mode.ECB, Padding.PKCS5Padding, key.getBytes()); // 根据构造出来的 aes 加密算法对数据进行加密 String encryptDataBase64 = aes.encryptBase64(data); // RSA 使用 公钥 进行签名加密 RSA platRsa = new RSA(null, publicKey); // 使用 公钥 对加密数据的 key 进行加密(对数据加密的钥匙进行加密) String encryptKeyBase64 = platRsa.encryptBase64(key, KeyType.PublicKey); // 构建签名实例 Sign appSign = new Sign(SignAlgorithm.SHA1withRSA, privateKey, publicKey); // 用私钥对信息生成数字签名 并 进行base64处理 String signBase64 = Base64.encode(appSign.sign(data.getBytes())); System.out.println("sign:" + signBase64);
发送:
encryptDataBase64,加密后的数据
encryptKeyBase64,加密后的key
signBase64 ,签名给对方
/* 解密 */ // 使用公钥、私钥 构造 RSA实例 RSA appRsa = new RSA(privateKey, publicKey); // 解密、加密数据的 key key = appRsa.decryptStr(encryptKeyBase64, KeyType.PrivateKey); // 构建解密数据的实例 aes = new AES(Mode.ECB, Padding.PKCS5Padding, key.getBytes()); // 解密传输的数据 String plaintextData = aes.decryptStr(encryptDataBase64); // 构建 Sign 实例,验签使用 Sign platSign = new Sign(SignAlgorithm.SHA1withRSA, null, publicKey); // 用公钥检验数字签名的合法性 boolean verify = platSign.verify(plaintextData.getBytes(), Base64.decode(signBase64)); System.out.println("验证签名:" + verify); if (verify) { System.out.println("验证签名成功"); } else { System.out.println("验证签名失败"); } }
分类:
Java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
2017-01-21 Unit01: JDBC原理 、 JDBC基础编程
2016-01-21 Linux增加Swap分区