非对称加密算法RSA

2023-10-29

package com.imooc.security.rsa;

import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;

import javax.crypto.Cipher;

import org.apache.commons.codec.binary.Base64;

/**
 * 非对称加密算法
 * @author Bingo_Ge
 * RSA算法(事实上的标准,也可以用在数字签名)
 */
public class ImoocRSA {
	private static String src = "imooc security rsa";

	public static void main(String[] args) {
		jdkRSA();
	}
	
	public static void jdkRSA() {
		try {
			//1.初始化密钥
			KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); //使用RSA非对称加密方式
			keyPairGenerator.initialize(512);
			KeyPair keyPair = keyPairGenerator.generateKeyPair();  //生成密钥对
			RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();
			RSAPrivateKey rsaPrivateKey  = (RSAPrivateKey) keyPair.getPrivate();
			
			System.out.println("RSAPublicKey:" + Base64.encodeBase64String(rsaPublicKey.getEncoded()));
			System.out.println("RSAPrivateKey:" + Base64.encodeBase64String(rsaPrivateKey.getEncoded()));
			
			//2.私钥加密,公钥解密(加密)
			PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded());
			KeyFactory keyFactory = KeyFactory.getInstance("RSA");
			PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
			
			Cipher cipher = Cipher.getInstance("RSA");
			cipher.init(Cipher.ENCRYPT_MODE, privateKey);
			byte[] result = cipher.doFinal(src.getBytes());
			System.out.println("私钥加密,公钥解密(加密):" + Base64.encodeBase64String(result));
			
			//3.私钥加密,公钥解密(解密)
			X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(rsaPublicKey.getEncoded());
			keyFactory = KeyFactory.getInstance("RSA");
			PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
			
			cipher.init(Cipher.DECRYPT_MODE, publicKey);
			result = cipher.doFinal(result);
			System.out.println("私钥加密,公钥解密(解密):" + new String(result));
			
			//4.公钥加密,私钥解密(加密)
			x509EncodedKeySpec = new X509EncodedKeySpec(rsaPublicKey.getEncoded());
			keyFactory = KeyFactory.getInstance("RSA");
			publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
			
			cipher.init(Cipher.ENCRYPT_MODE, publicKey);
			result = cipher.doFinal(src.getBytes());
			System.out.println("公钥加密,私钥解密(加密):" + Base64.encodeBase64String(result));
			
			//5.公钥加密,私钥解密(解密)
			pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded());
			keyFactory = KeyFactory.getInstance("RSA");
			privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
			
			cipher = Cipher.getInstance("RSA");
			cipher.init(Cipher.DECRYPT_MODE, privateKey);
			result = cipher.doFinal(result);
			System.out.println("公钥加密,私钥解密(解密):" + new String(result));
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

非对称加密算法RSA 的相关文章

随机推荐

  • 运维实践

    欢迎关注 WeiyiGeek 点击 下方卡片 即可关注我哟 设为 星标 每天带你 基础入门 到 全栈实践 再到 放弃学习 涉及 网络安全运维 应用开发 物联网IOT 学习路径 个人感悟 等知识 花开堪折直须折 莫待无花空折枝 作者主页 ht
  • (已解决) org.apache.ibatis.ognl.OgnlException: source is null for getProperty(null, “staffId“)

    问题现象 今天在项目中遇到一个mybatis的报错 org apache ibatis ognl OgnlException source is null for getProperty null staffId 这是我之前从未遇到过的问题
  • 如何结合FT2232HL/CMSIS-DAP+Eclipse+OpenOCD软硬件工具使用SWD调试接口在Windows10操作系统在线调试S32K3XX(Cortex M7)

    由于我们公司自己需要开发烧录工具 本人通过google搜相关文档和看ARM公司的技术文档 终于实现了这个功能 因为涉及的内容知识点比较多 对于玩嵌入式MCU的小白来说要普及的知识 逐个介绍篇幅会比较长 本文中只介绍相应的关键知识点 篇幅有相
  • 大家好,这里是第一篇博客文章!

    大家好 我的第一篇CSDN博客与大家见面了 去年曾经在班级微信公众平台写过一篇关于MySql的安装及配置的推送 周围同学的反响还都不错 想着为今后找到一个技术分享交流的平台 也能够快速地增删改查已发布的文章 并且进行有效的沟通交流 便开通了
  • 面向对象的设计原则

    开放封闭原则 软件实体 类 模块 函数等 应该可以扩展 但是不可修改 大白话 就是面对新需求时 现有的类最好不做修改 以增加新的类的方式来完成新需求 这样方便维护和扩展 依赖倒转原则 抽象不应该依赖细节 细节应该依赖于抽象 1 高层模块不应
  • 慕课:软件测试各章节答案

    说明 1 该课程为西北工业大学的软件测试的慕课 2 绿色选项为正确答案 题目后括号中的答案为本人的作答 对的用绿色标示 错的用红色标示 与错题集类似 第一章 软件测试基础 1 软件测试目的是什么 ABC A 修正软件错误和缺陷提高软件质量
  • NUC980开源项目29-W25N01挂载YAFFS2文件系统

    上面是我的微信和QQ群 欢迎新朋友的加入 配置内核 取消ramdisk 设置Boot option set bootargs noinitrd root dev mtdblock2 rootfstype yaffs2 rootflags i
  • 互连线的阻抗不连续

    前言 保持互连通道的阻抗连续性 是信号完整性设计的一项重要内容 互连通道中如果存在阻抗不连续点 不仅会引起待传输信号本身的反射 而且可能还会放大其他方面因素的影响 例如串扰噪声耦合到邻近线 在临近线上传播 如果邻近线上存在多处不连续点 串扰
  • 亲密关系-【有效表达】-如何完善自己的表达思路?

    有效沟通三步 1 正面假设 2 区分感受和结论 3 区分请求和命令 案例 最近工作压力大 跟老公说我需要他安慰 他却觉得我作 还说最近是不是闲的 你需要安慰 老公理解的是 老公说你作 你听到的是 攻击 不想再表达 你听到这件事 想说些什么
  • 关于数据治理ChatGPT是如何回答的?

    这两天你的朋友圈是不是被火爆全网的ChatGPT霸屏了 你是不是已经迫不及待感受过ChatGPT带来的惊喜 那你知道ChatGPT是什么吗 面对掀起的一波话题热潮 好奇使然 小编去特别关注了一下最近火热的ChatGPT 看看这是何方神圣 竟
  • openvas漏洞扫描器

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 一 openvas简介 二 作用 三 安装及使用 openvas架构 在这里插入图片描述 https img blog csdnimg cn f46eba30a8a
  • jvm垃圾回收机制原理读书笔记

    可达性分析 主要是用来解决哪些对象是不可用的 可以被回收 以一系列称为GC Roots的对象为起点 若对象到GC Roots之间没有任何引用关系 则认为该对象是不可用的 可以被回收 具体可作为GC Roots的对象如下 不是全部 所有Jav
  • 基于随机森林特征工程语音用户满意度分析(数据预处理+随机森林)

    1 背景 数据分析而言 数据是显而易见的核心 但是并不是所有的数据都是有用的 存在不完整的 含噪声的和不一致的数据是现实世界大型的数据库或数据仓库的共同特点 一些比较成熟的算法对其处理的数据集合一般有一定的要求 如数据完整性好 数据的冗余性
  • 小程序生成长图(预览,不限高度)+小程序码+小程序码中间logo换成自定义logo

    上条博客已经介绍了如何云调用生成小程序码 链接地址 https blog csdn net mingjuna2010 article details 92796711 这条博客我们来介绍小程序中怎么生成长图 如何预览 并且在长图中绘制小程序
  • Ubuntu虚拟环境的创建与退出

    第一 安装Anaconda 并将其移入到系统环境变量中 查看安装结果 conda info或conda V 第二 创建虚拟环境 conda create name py38 python 3 8 第三 每次使用虚拟环境时需要激活环境 激活方
  • Spring注解扫描:ComponentScan使用及原理详解

    1 概述 当下Spring Boot之所以能成为主流首选开发框架 得益于其核心思想 约定大于配置和Spring提供的基于注解配置式开发 解决了繁琐的XML文件配置问题 大大提高了开发效率 基于Spring MVC三层架构框架开发的项目中大量
  • Cannot find module ‘node-sass‘的解决方法思路

    搞了两个小时 排查是版本不匹配的问题 提供几种思路 NODE SASS 一 NODE版本导致 node v 如果是V16 先尝试一下小代价的命令 不行就只能卸载Node了 1 小代价 卸载不一致的sass 如果不行请 2 卸载命令 npm
  • REDIS的高可用之持久化,主从,哨兵,集群

    目录 第一章高可用 1 1概述 1 2高可用的方法 第二章 持久化 2 1持久化作用 2 2持久化的方式 2 3 RDB 持久化 2 4 AOF持久化 2 5 RDB和AOF的优缺点 2 6 REDIS性能管理 第三章redis的主从复制
  • Potplayer播放器“打开链接”卡住的解决方法

    最近装了个potplayer用来看电视直播 每次打开链接都会假死几秒钟 去百度找了几个方法适用后只有这一个有效 记录并分享一下 1 下载MediaUrlList 解决 打开链接 卡顿 推荐 as 下载地址 链接 https pan baid
  • 非对称加密算法RSA

    package com imooc security rsa import java security KeyFactory import java security KeyPair import java security KeyPair