java 中RSA的方式实现非对称加密的实例

RSA通俗理解:
你只要去想:既然是加密,那肯定是不希望别人知道我的消息,所以只有我才能解密,所以可得出公钥负责加密,私钥负责解密;同理,既然是签名,那肯定是不希望有人冒充我发消息,只有我才能发布这个签名,所以可得出私钥负责签名,公钥负责验证。
实现代码:
package com.sahadev;
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;
public class RSA {
public static void main(String[] args) {
JDKRSA();
}
public static void JDKRSA() {
try {
// 构建密钥对儿
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(512);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();
RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();
System.out.println("Public Key : " + org.apache.commons.codec.binary.Base64.encodeBase64String(rsaPublicKey.getEncoded()));
System.out.println("Private Key : " + org.apache.commons.codec.binary.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(DH.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 = Cipher.getInstance("RSA");
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 = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
result = cipher.doFinal(DH.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();
}
}
}
附上输出结果:
Public Key : MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJcFshoP5xm94r2aTbe++aMZMzJtXHxDpqmMQ9aL1cEthr2Xtac+Eckv32Kzb4R8C/6vObNBfd8sWx9FU5N2y6cCAwEAAQ== Private Key : MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAlwWyGg/nGb3ivZpNt775oxkzMm1cfEOmqYxD1ovVwS2GvZe1pz4RyS/fYrNvhHwL/q85s0F93yxbH0VTk3bLpwIDAQABAkBdAA7rabug6IRGykztyFcmjxAuD5aSl358jnoAFuCtMo4skfxh1vR4ENFUE0Lt0zJ3CKVH0o9UQDNG0r4jeOGRAiEA3KuXps9OG0AXuxLggg0e7B1Os5C3gNrH2fMqAPjtpY0CIQCvM4EPfdrjjNQiM0ATVBT5jZnw3PRu33pdyISWuoMHAwIgDOLMSUZjxj2Y5Si2CYIgoyMW/G9f99tOvlBvzHy8y+UCIF94MVu/uQdGNlJsmv3tU4CpKLmXrZq9LHDuU1HPUJcBAiEAy/0OS2Q9EBfmPwhsGXF4WMxj4wG0xzNFWxSeZB0qxzk= 私钥加密,公钥解密------加密 : NXF87irBEmK3x/fW7IWY4GuA8AP4Rvj4DJSp2Cjjsoo5X/ScHHKdvYtlM+9TOUAvMeuKWk5WH70g53q7+E73zg== 私钥加密,公钥解密------解密 : Hello,sahadev! 公钥加密,私钥解密------加密 : hjL8928jCbNtVCRhKaYAxQNJmiIAktBskhff2I01pbaHtfGH6GJTcP1i345/3I9OzwoVFxvi/oXgVJsIsg7MOQ== 公钥加密,私钥解密------解密 : Hello,sahadev!
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# java
# RSA
# 加密
# 加密的实例
# java 非对称加密算法RSA实现详解
# JAVA加密算法- 非对称加密算法(DH
# RSA)的详细介绍
# Java 实现常见的非对称加密算法
# 解决JAVA非对称加密不同系统加密结果不一致的问题
# java 非对称加密算法DH实现详解
# java结合keytool如何实现非对称加密与解密详解
# Java编程实现非对称加密的方法详解
# java 中DH的方式实现非对称加密的实例
# 教你用Java实现RSA非对称加密算法
# 公钥
# 我才
# 如有
# 希望能
# 谢谢大家
# 去想
# 发消息
# 疑问请
# 非对称
# public
# static
# String
# main
# void
# commons
# apache
# org
# binary
# codec
# args
相关文章:
零基础网站服务器架设实战:轻量应用与域名解析配置指南
如何在云虚拟主机上快速搭建个人网站?
建站之星如何配置系统实现高效建站?
如何选择最佳自助建站系统?快速指南解析优劣
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
网站好制作吗知乎,网站开发好学吗?有什么技巧?
建站之星安装后如何自定义网站颜色与字体?
制作网站的软件免费下载,免费制作app哪个平台好?
php json中文编码为null的解决办法
如何零基础开发自助建站系统?完整教程解析
建站之星安装后如何配置SEO及设计样式?
宿州网站制作公司兴策,安徽省低保查询网站?
实现虚拟支付需哪些建站技术支撑?
高防服务器如何保障网站安全无虞?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
实现点击下箭头变上箭头来回切换的两种方法【推荐】
GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?
如何在万网ECS上快速搭建专属网站?
如何破解联通资金短缺导致的基站建设难题?
小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?
高端网站建设与定制开发一站式解决方案 中企动力
如何基于云服务器快速搭建网站及云盘系统?
如何快速辨别茅台真假?关键步骤解析
网站制作网站,深圳做网站哪家比较好?
如何配置IIS站点权限与局域网访问?
制作证书网站有哪些,全国城建培训中心证书查询官网?
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
建站168自助建站系统:快速模板定制与SEO优化指南
定制建站流程步骤详解:一站式方案设计与开发指南
常州自助建站工具推荐:低成本搭建与模板选择技巧
如何通过服务器快速搭建网站?完整步骤解析
SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?
如何在万网自助建站中设置域名及备案?
如何快速搭建安全的FTP站点?
php条件判断怎么写_ifelse和switchcase的使用区别【对比】
建站之星下载版如何获取与安装?
建站之星24小时客服电话如何获取?
建站主机无法访问?如何排查域名与服务器问题
专业网站建设制作报价,网页设计制作要考什么证?
建站之星如何通过成品分离优化网站效率?
如何通过PHP快速构建高效问答网站功能?
网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?
清除minerd进程的简单方法
为什么Go需要go mod文件_Go go mod文件作用说明
网站企业制作流程,用什么语言做企业网站比较好?
C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换
建站之星免费版是否永久可用?
c# 在ASP.NET Core中管理和取消后台任务
定制建站价位费用解析与套餐推荐全攻略
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
*请认真填写需求信息,我们会在24小时内与您取得联系。