RSA非对称加密算法(Java实现)

ops/2024/10/10 12:08:40/

废话不多说,直接上代码

java">public class RSAService {private static final String RSA = "RSA";private static final String PUBLIC_KEY = "xxx";private static final String PRIVATE_KEY = "xxx";public static void main(String[] args) throws Exception {// 生成密钥对KeyPair keyPair = generateKeyPair();PublicKey publicKey = keyPair.getPublic();PrivateKey privateKey = keyPair.getPrivate();// 公钥和私钥的Base64编码表示String publicKeyBase64 = Base64.getUrlEncoder().encodeToString(publicKey.getEncoded());String privateKeyBase64 = Base64.getUrlEncoder().encodeToString(privateKey.getEncoded());System.out.println("公钥: " + publicKeyBase64);System.out.println("私钥: " + privateKeyBase64);RSAService rsaService = new RSAService();// 原文HashMap<String, Object> map = new HashMap<>();map.put("data", "Hello, RSA!");// 公钥加密String encryptedText = rsaService.encrypt(JSON.toJSONString(map));System.out.println("加密后: " + encryptedText);// 私钥解密String decryptedText = rsaService.decrypt(encryptedText);}// 生成密钥对public static KeyPair generateKeyPair() throws Exception {KeyPairGenerator keyGen = KeyPairGenerator.getInstance(RSA);keyGen.initialize(2048);return keyGen.generateKeyPair();}// 使用公钥加密public String encrypt(String data) throws Exception {byte[] keyBytes = Base64.getUrlDecoder().decode(PUBLIC_KEY);X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes);KeyFactory keyFactory = KeyFactory.getInstance(RSA);PublicKey publicKey = keyFactory.generatePublic(spec);Cipher cipher = Cipher.getInstance(RSA);cipher.init(Cipher.ENCRYPT_MODE, publicKey);byte[] bytes = cipher.doFinal(data.getBytes());//二进制码转字符串String base64Encoded = Base64.getUrlEncoder().encodeToString(bytes);return base64Encoded;}// 使用私钥解密public String decrypt(String data) throws Exception {byte[] keyBytes = Base64.getUrlDecoder().decode(PRIVATE_KEY);byte[] dataBytes = Base64.getUrlDecoder().decode(data);PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);KeyFactory keyFactory = KeyFactory.getInstance(RSA);PrivateKey privateKey = keyFactory.generatePrivate(spec);Cipher cipher = Cipher.getInstance(RSA);cipher.init(Cipher.DECRYPT_MODE, privateKey);byte[] bytes = cipher.doFinal(dataBytes);return new String(bytes);}
}

http://www.ppmy.cn/ops/86985.html

相关文章

外设购物平台

目 录 一、系统分析 二、系统设计 2.1 系统功能设计 2.2 数据库设计 三、系统实现 3.1 注册功能 3.2 登录功能 3.3 分页查询所有商品信息功能 3.4 分页条件&#xff08;精确、模糊&#xff09;查询商品信息功能 3.5 购物车功能 3.6 订单管理功能 四、项…

UNIX 域协议

1. UNIX域协议 利用socket 编程接口实现本地进程间通信 UNIX域协议套接字&#xff1a;可以使用TCP&#xff0c;也可以使用UDP SOCK_STREAM -----> TCP 面向字节流 SOCK_DGRAM -----> UDP 面向数据报 UNIX域协议并不是一个实际的协议族&#xff0c;而是在单个主机上执…

第13周 简历职位功能开发与Zookeeper实战

第13周 简历职位功能开发与Zookeeper实战 本章概述1. Mysql8窗口函数over使用1.1 演示表结构与数据1.2 案例1:获取男女总分数1.3 案例2****************************************************************************************本章概述 1. Mysql8窗口函数over使用 参考案例…

Nginx实现数据库端口转发

作者&#xff1a;红米 一、需求 客户想要将IDC服务器的数据库端口暴漏在公网上&#xff0c;然后其他业务来调数据库接口。为了保证安全&#xff0c;只开放指定的公网ip访问。 二、逻辑设计 由于客户的IDC服务器与云ECS服务器通过专线打通&#xff0c;所以只需要在云ECS服务…

每天一个数据分析题(四百五十七)- 分层随机抽样

一项针对全国25-35岁用户群的手机喜好调查&#xff0c;但调研项目经费大概是10万元&#xff0c;并且用户群相对集中在中国中部城市。前期预调研显示&#xff0c;用户群的方差和调研费用不等。以下哪种情况是比较适宜的调查方式&#xff1f; A. 简单随机抽样&#xff08;全国抽…

【Linux】多路转接 -- select函数

文章目录 1. 认识select函数2. select函数原型3. socket就绪条件4. select工作流程5. select服务器6. select的优缺点 首先我们要了解一下&#xff0c;什么是多路转接&#xff1f; 多路转接也叫多路复用&#xff0c;是一种用于管理多个IO通道的技术。它能实现同时监听和处理多个…

NC 缺失的第一个正整数

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 给定一个无重…

C++ - 负载均衡式在线OJ

目录 一.项目的宏观结构 1.1 只实现类似 leetcode 的题⽬列表在线编程功能 1.2 项⽬宏观结构 1.3编写思路 二.所⽤技术与开发环境 2.1 所用技术 2.2 开发环境 三.compiler 服务设计 3.1 编译功能 3.2 日志功能 3.3 运⾏功能 3.4 编译并运⾏功能 3.5 把编译并运⾏功…