全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

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小时内与您取得联系。