java的RSA加密解密示例

RSA算法是一种非对称加密算法,公钥和私钥都可以用于加密和解密操作。在RSA算法中,公钥用于加密数据,私钥用于解密数据。

具体来说,使用公钥加密的数据只能使用相应的私钥进行解密。而使用私钥加密的数据则可以使用相应的公钥进行解密。

这种非对称性使得RSA算法非常适合用于加密通信和数字签名等场景,其中公钥通常用于加密传输的数据,而私钥用于解密接收到的数据。这样,只有持有私钥的一方能够解密加密的数据,从而确保了数据的机密性和完整性。

虽然公钥相同,但是每次加密后的密文是不一样的。

package xin.students.exam;import javax.crypto.Cipher;
import java.security.*;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;public class EncryptionUtils {//公钥private static String publicKeyStr;//私钥private static String privateKeyStr;static {try {KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");keyPairGenerator.initialize(1024);KeyPair keyPair = keyPairGenerator.generateKeyPair();PublicKey publicKey = keyPair.getPublic();PrivateKey privateKey = keyPair.getPrivate();publicKeyStr = Base64.getEncoder().encodeToString(publicKey.getEncoded());privateKeyStr = Base64.getEncoder().encodeToString(privateKey.getEncoded());} catch (NoSuchAlgorithmException e) {e.printStackTrace();}}private static String encryptFun(String plainText, String publicKeyStr) throws Exception {byte[] bytes = Base64.getDecoder().decode(publicKeyStr);X509EncodedKeySpec keySpec = new X509EncodedKeySpec(bytes);KeyFactory keyFactory = KeyFactory.getInstance("RSA");PublicKey publicKey = keyFactory.generatePublic(keySpec);Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.ENCRYPT_MODE, publicKey);byte[] cipherText = cipher.doFinal(plainText.getBytes());return Base64.getEncoder().encodeToString(cipherText);}private static String decryptFun(String cipherText, String privateKeyStr) throws Exception {byte[] bytes = Base64.getDecoder().decode(privateKeyStr);PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(bytes);KeyFactory keyFactory = KeyFactory.getInstance("RSA");PrivateKey privateKey = keyFactory.generatePrivate(keySpec);Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.DECRYPT_MODE, privateKey);byte[] plainText = cipher.doFinal(Base64.getDecoder().decode(cipherText));return new String(plainText);}//用于加密public static String encrypt(String plainText, String publicKeyStr) throws Exception {return EncryptionUtils.encryptFun(plainText, publicKeyStr);}//用于解密public static String decrypt(String cipherText, String privateKeyStr) throws Exception {return EncryptionUtils.decryptFun(cipherText, privateKeyStr);}public static void main(String[] args) throws Exception {String plainText = "李义新";// Encrypt the plain text using the public keyString encrypted = EncryptionUtils.encrypt(plainText, EncryptionUtils.publicKeyStr);System.out.println("Encrypted Text: " + encrypted);// Decrypt the encrypted text using the private keyString decrypted = EncryptionUtils.decrypt(encrypted, EncryptionUtils.privateKeyStr);System.out.println("Decrypted Text: " + decrypted);}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/14197.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【BUG历险记】vivado报错:binding vhdl entity ‘ xxxxx ‘does not have port ‘ xxxxx ‘解决方案

🏔【BUG历险记】vivado报错:binding vhdl entity xxxxx does not have port xxxxx 解决方案 问题描述 我在编写雷达的脉冲压缩仿真时,先例化了FFT和复数乘法器,并仿真验证通过了;再例化IFFT,结果仿真时…

最新抖音娱乐测评小程序源码 Thinkphp后端 抖音引流小程序

最新抖音娱乐测评小程序源码 thinkphp后端 抖音引流小程序 附搭建教程 测试环境 NginxPHP7.0MySQL5.6 网站运行目录设置为 /web 数据库配置文件 \source\application\database.php 后台登录地址 http://你的域名/index.php?s/admin/passport/login

Python学习笔记(十九)————json相关

目录 (1)什么是json (2) json有什么用 (3) json格式数据转化 (4)Python数据和Json数据的相互转化 (1)什么是json JSON 是一种轻量级的数据交互格式。可以按照…

ETHERNET/IP 转ETHERCAT连接ethercat总线伺服如何控制

远创智控YC-EIP-ECT网关连接到ETHERNET/IP总线中做为从站使用,连接到ETHERCAT总线中做为从站使用,可以同时满足多种工业生产的需求。支持广泛的设备类型,可以和多种不同的设备进行通讯。 技术参数 ETHERNET/IP 技术参数 ● 网关做为 ETHERN…

调戏chatGPT(三)逻辑推理

chatGPT已经被吹的神乎其神了,今天我来测试一下chatGPT的逻辑推理能力 t 你好 你好!很高兴能与您交流。 T 今天我想考考你的智力,看看你的逻辑思维能力如何 太好了!我非常乐意 t 一根质地不均匀的绳子完全烧完需要1小时…

Pytorch深度强化学习1-3:策略评估与贝尔曼期望方程详细推导

目录 0 专栏介绍1 从一个例子出发2 回报与奖赏3 策略评估函数4 贝尔曼期望方程5 收敛性证明 0 专栏介绍 本专栏重点介绍强化学习技术的数学原理,并且采用Pytorch框架对常见的强化学习算法、案例进行实现,帮助读者理解并快速上手开发。同时,辅…

基于springboot,vue网上订餐系统

开发工具:IDEA 服务器:Tomcat9.0, jdk1.8 项目构建:maven 数据库:mysql5.7 前端技术 :VueElementUI 服务端技术:springbootmybatisredis 本系统分用户前台和管理后台两部分,项…

P3804 【模板】后缀自动机(SAM)

题目描述 给定一个只包含小写字母的字符串 S。 请你求出 S 的所有出现次数不为 11 的子串的出现次数乘上该子串长度的最大值。 输入格式 一行一个仅包含小写字母的字符串 S。 输出格式 一个整数,为所求答案。 题解:这里就不讲后缀自动机的模板相关…

云原生之深入解析K8S的请求和限制

一、Kubernetes 限制和请求 在 Kubernetes 中使用容器时,了解涉及的资源是什么以及为何需要它们很重要。有些进程比其它进程需要更多的 CPU 或内存,这很关键,永远不应该让进程饥饿,知道了这一点,那么应该正确配置容器…

PowerShell和cmd区别以及在文件夹快速打开cmd窗口的几种方法

区别: cmd是Windows才有的,PowerShell是跨平台通用的 cmd进入的是dos系统 PowerShell可以看作是cmd的升级版。PowerShell更方便使用,而且功能更加强大 方法: 1.在PowerShell中打开cmd 在当前文件夹,shift右键找到…

【数据分析 - 基础入门之NumPy①】Anaconda安装及使用

知识目录 前言一、 Anaconda是什么二、为什么使用Anaconda三、安装步骤3.1 下载安装3.2 配置conda源 结语 前言 大家好!我是向阳花花花花,本期给大家带来的是 Anaconda 安装及使用。 每日金句分享:故事不长,也不难讲。』—— 「…

Squid 缓存代理--反向代理

Squid 缓存代理–反向代理 反向代理:如果Squid反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端:否则反向代理服务器将向后台的WEB服务器请求资源,然后将请求的应答返回给客户端,同时也将应答缓…