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

发布时间 - 2026-01-11 02:40:31    点击率:

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 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 公司网站制作需要多少钱,找人做公司网站需要多少钱?  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  如何快速上传自定义模板至建站之星?  如何为不同团队 ID 动态生成多个独立按钮  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  python中快速进行多个字符替换的方法小结  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  简单实现jsp分页  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】  Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程  如何快速生成凡客建站的专业级图册?  Python自动化办公教程_ExcelWordPDF批量处理案例  Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例  php结合redis实现高并发下的抢购、秒杀功能的实例  Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程  详解jQuery中基本的动画方法  Laravel怎么使用Intervention Image库处理图片上传和缩放  如何用免费手机建站系统零基础打造专业网站?  Laravel如何使用查询构建器?(Query Builder高级用法)  如何在Windows环境下新建FTP站点并设置权限?  大连 网站制作,大连天途有线官网?  新三国志曹操传主线渭水交兵攻略  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  如何挑选优质建站一级代理提升网站排名?  EditPlus中的正则表达式实战(5)  如何挑选高效建站主机与优质域名?  今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】  Laravel如何配置Horizon来管理队列?(安装和使用)  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  利用 Google AI 进行 YouTube 视频 SEO 描述优化  Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】  高端企业智能建站程序:SEO优化与响应式模板定制开发  Java解压缩zip - 解压缩多个文件或文件夹实例  实现点击下箭头变上箭头来回切换的两种方法【推荐】  如何在IIS中新建站点并配置端口与IP地址?  简历在线制作网站免费版,如何创建个人简历?  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  LinuxShell函数封装方法_脚本复用设计思路【教程】  EditPlus中的正则表达式 实战(1)  Python文件操作最佳实践_稳定性说明【指导】  Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明  Laravel如何升级到最新版本?(升级指南和步骤)  怎么用AI帮你设计一套个性化的手机App图标?  微信小程序制作网站有哪些,微信小程序需要做网站吗?