Java使用非对称数据加密RSA
非对称加密算法需要两个密钥:公开密钥(publicKey)和私有密钥(privateKey);公钥加密,私钥解密;
实现一下RSA加密的工具类吧
注意:RSA加密明文最大长度是117字节,解密要求密文最大长度为128字节,所以再加密和解密的时候要分段进行,就是每117字节就加密,然后再把这一节节拼起来。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | public class AES_RSAUtil { public static void main(String[] args) throws Exception{ /*模拟客户端*/ String msg = "hello 冬竹" ; byte [] key = AESUtil.getKeys(); //获取密钥的编码 byte [] bytes = AESUtil.encrypt(msg,key); String seKey = Base64.encodeBase64URLSafeString(key); //转成字符串之后进行再加密 RSAUtil.init(); //RSA公钥 加密后的 AES密钥 String encryptKey = RSAUtil.encryptByPublicKey(seKey,RSAUtil.getPublicKey(RSAUtil.keyMap.get( "PUBLIC_KEY" ))); /*模拟服务端*/ //解码AES密钥 String aesKey = RSAUtil.decryptByPrivateKey(encryptKey,RSAUtil.getPrivateKey(RSAUtil.keyMap.get( "PRIVATE_KEY" ))); //还原aesKey byte [] secretKey = Base64.decodeBase64(aesKey); String ming = new String(AESUtil.decrypt(bytes,secretKey)); System.out.println(ming); } } |
加密字符串的过程:
1. msg.getBytes() 获得字符数组, 然后用rsaSplitCode() 方法加密,再用encodeBase64URLSafeString编码成字符串(密文)
解密字符串的过程:
1. decodeBase64() 把密文解码成字符数组,再用new String()方法转为字符串
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!