public classRSAEncrypt {private static Map keyMap = new HashMap(); //用于封装随机产生的公钥与私钥

public static void main(String[] args) throwsException {//生成公钥和私钥

genKeyPair();//加密字符串

String message = "Pass1234";

System.out.println("随机生成的公钥为:" + keyMap.get(0));

System.out.println("随机生成的私钥为:" + keyMap.get(1));

String messageEn= encrypt(message, keyMap.get(0));

System.out.println(message+ "\t加密后的字符串为:" +messageEn);

String messageDe= decrypt(messageEn, keyMap.get(1));

System.out.println("还原后的字符串为:" +messageDe);

}/*** 随机生成密钥对

*

*@throwsNoSuchAlgorithmException*/

public static void genKeyPair() throwsNoSuchAlgorithmException {//KeyPairGenerator类用于生成公钥和私钥对,基于RSA算法生成对象

KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");//初始化密钥对生成器,密钥大小为96-1024位

keyPairGen.initialize(512, newSecureRandom());//生成一个密钥对,保存在keyPair中

KeyPair keyPair =keyPairGen.generateKeyPair();

RSAPrivateKey privateKey= (RSAPrivateKey) keyPair.getPrivate(); //得到私钥

RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); //得到公钥

String publicKeyString = newString(Base64.encodeBase64(publicKey.getEncoded()));//得到私钥字符串

String privateKeyString = newString(Base64.encodeBase64((privateKey.getEncoded())));//将公钥和私钥保存到Map

keyMap.put(0, publicKeyString); //0表示公钥

keyMap.put(1, privateKeyString); //1表示私钥

}/*** RSA公钥加密

*

*@paramstr 加密字符串

*@parampublicKey 公钥

*@return密文

*@throwsException 加密过程中的异常信息*/

public static String encrypt(String str, String publicKey) throwsException {//base64编码的公钥

byte[] decoded =Base64.decodeBase64(publicKey);

RSAPublicKey pubKey= (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(newX509EncodedKeySpec(decoded));//RSA加密

Cipher cipher = Cipher.getInstance("RSA");

cipher.init(Cipher.ENCRYPT_MODE, pubKey);

String outStr= Base64.encodeBase64String(cipher.doFinal(str.getBytes("UTF-8")));returnoutStr;

}/*** RSA私钥解密

*

*@paramstr 加密字符串

*@paramprivateKey 私钥

*@return铭文

*@throwsException 解密过程中的异常信息*/

public static String decrypt(String str, String privateKey) throwsException {//64位解码加密后的字符串

byte[] inputByte = Base64.decodeBase64(str.getBytes("UTF-8"));//base64编码的私钥

byte[] decoded =Base64.decodeBase64(privateKey);

RSAPrivateKey priKey= (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(newPKCS8EncodedKeySpec(decoded));//RSA解密

Cipher cipher = Cipher.getInstance("RSA");

cipher.init(Cipher.DECRYPT_MODE, priKey);

String outStr= newString(cipher.doFinal(inputByte));returnoutStr;

}

}

java rsa2加密算法_java RSA加密解密相关推荐

  1. angular和JAVA实现aes、rsa加密解密,前后端交互,前端加解密和后端JAVA加解密实现

    今天实现了下AES和RSA加密解密,主要的功能是对前后端交互数据进行加密解密,为什么要用到两个算法呢,首先RSA默认的话加密长度是有限的100多个byte吧大约,并且需要公钥私钥,而AES加密没有限制 ...

  2. java 解密后为空_java RSA加密解密

    该工具类中用到了BASE64,需要借助第三方类库:javabase64-1.3.1.jar注意:RSA加密明文最大长度117字节,解密要求密文最大长度为128字节,所以在加密和解密的过程中需要分块进行 ...

  3. java rsa 验_Java使用RSA加密解密签名及校验

    RSA加密解密类: package com.ihep; import java.io.BufferedReader; import java.io.BufferedWriter; import jav ...

  4. java rsa签名_Java使用RSA加密解密签名及校验

    由于项目要用到非对称加密解密签名校验什么的,于是参考<Java加密解密的艺术>写一个RSA进行加密解密签名及校验的Demo,代码很简单,特此分享! 一.项目截图 代码下载后,导入到ecli ...

  5. java rsa 解密_Java中RSA加密解密的实现方法分析

    本文实例讲述了Java中RSA加密解密的实现方法.分享给大家供大家参考,具体如下: public static void main(String[] args) throws Exception { ...

  6. RSA加密解密及数字签名Java实现--转

    RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.当时他们三人都在麻省理工学院 ...

  7. Java使用RSA加密解密签名及校验

    RSA加密解密类: import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; i ...

  8. RSA加密解密算法的java实现

    最近有一个外部合作项目要求在数据传输过程中使用RSA加密算法对数据进行加密,所以需要编写一个加解密的工具类,因为对方不是java语言,所以是各自实现的这个工具,本文主要讨论实现以及双方调试过程中的一些 ...

  9. 1、【java数据安全】数据安全之加密解密(base64、MD、SHA、DES、AES、IDEA、PBE、DH、RSA、EIGamal)、数字签名(DSA、ECDSA)和数字证书介绍、应用示例详细介绍

    java数据安全 系列文章 1.[java数据安全]数据安全之加密解密(base64.MD.SHA.DES.AES.IDEA.PBE.DH.RSA.EIGamal).数字签名(DSA.ECDSA)和数 ...

  10. C# Java间进行RSA加密解密交互

    C# Java间进行RSA加密解密交互 原文:C# Java间进行RSA加密解密交互 这里,讲一下RSA算法加解密在C#和Java之间交互的问题,这两天纠结了很久,也看了很多其他人写的文章,颇受裨益, ...

最新文章

  1. 在一个IIS上同时运行两个版本ASP.NET报错的
  2. mxnet基础到提高(7)--卷积神经网络基础(2)
  3. Boost::context模块fiber的回溯测试程序
  4. Client Side Cache 和 Server Side Cache 的区别
  5. struts2中各版本jar包需求及配置设置
  6. centos后台登录ftp_安卓TikTok无限制版、手游扫码登录更新
  7. 学术检索产品比较分析
  8. 功能强大的pdf控件,用户无需安装任何软件即可使用
  9. android驱动程序失败,android studio 3.0中的haxm错误需要数字签名的驱动程序
  10. Github使用教程Git下载文件
  11. Windows 7集成IE11(离线安装包、补丁)
  12. Ubuntu使用ZTE MF832S上网卡拨号上网
  13. pinia报错, getActivePinia was called with no active Pinia. Did you forget to install pinia?
  14. 安卓苹果下载地址合并 苹果安卓专用二维码是如何生成的
  15. php微信段子,微信朋友圈有趣的段子 朋友圈配图
  16. 罗克韦尔AB PLC安装Studio5000提示未安装Microsoft .NET Framework 3.5的解决方法
  17. 百分制成绩转换五分制F【Python习题】(保姆级图文+实现代码)
  18. 深度学习之DCN-v2
  19. history路由下,Whitelabel Error Page错误
  20. 石墨计算机,电脑CPU可不可以用石墨做?

热门文章

  1. jdk中ArrayList的实现
  2. python基础--字典
  3. C++--第11课 - 类的静态成员
  4. c# mvc ajax 提交与 接收参数
  5. Python---装饰器
  6. 《Core Data应用开发实践指南》一2.15 小结
  7. ADI公司完成对凌力尔特公司的收购
  8. 郁万玲:大数据时代的外贸精准营销
  9. postfix+dovecot+maildrop+mailscanner+clamav+spamassassin搭建rhel6平台邮件服务器
  10. OSPF 常见错误与排查方法