/*** RSA加密*/
public class RsaUtils {private static Map<Integer, String> keyMap = new HashMap<Integer, String>();  //用于封装随机产生的公钥与私钥public static void main(String[] args) throws Exception {//生成公钥和私钥genKeyPair();//加密字符串String message = "df723820";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);}/*** 随机生成密钥对* @throws NoSuchAlgorithmException*/public static void genKeyPair() throws NoSuchAlgorithmException {// KeyPairGenerator类用于生成公钥和私钥对,基于RSA算法生成对象KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");// 初始化密钥对生成器,密钥大小为96-1024位keyPairGen.initialize(1024,new SecureRandom());// 生成一个密钥对,保存在keyPair中KeyPair keyPair = keyPairGen.generateKeyPair();RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();   // 得到私钥RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();  // 得到公钥String publicKeyString = new String(Base64.encodeBase64(publicKey.getEncoded()));// 得到私钥字符串String privateKeyString = new String(Base64.encodeBase64((privateKey.getEncoded())));// 将公钥和私钥保存到MapkeyMap.put(0,publicKeyString);  //0表示公钥keyMap.put(1,privateKeyString);  //1表示私钥}/*** RSA公钥加密** @param str*            加密字符串* @param publicKey*            公钥* @return 密文* @throws Exception*             加密过程中的异常信息*/public static String encrypt( String str, String publicKey ) throws Exception{//base64编码的公钥byte[] decoded = Base64.decodeBase64(publicKey);RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded));//RSA加密Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.ENCRYPT_MODE, pubKey);String outStr = Base64.encodeBase64String(cipher.doFinal(str.getBytes("UTF-8")));return outStr;}/*** RSA私钥解密** @param str*            加密字符串* @param privateKey*            私钥* @return 铭文* @throws Exception*             解密过程中的异常信息*/public static String decrypt(String str, String privateKey) throws Exception{//64位解码加密后的字符串byte[] inputByte = Base64.decodeBase64(str.getBytes("UTF-8"));//base64编码的私钥byte[] decoded = Base64.decodeBase64(privateKey);RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded));//RSA解密Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.DECRYPT_MODE, priKey);String outStr = new String(cipher.doFinal(inputByte));return outStr;}}

Java - 使用Cipher类实现加密(RSA)相关推荐

  1. java中的Cipher类 (加密和解密)

     该类位于javax.crypto包下,声明为 public class Cipher extends Object 此类为加密和解密提供密码功能.它构成了 Java Cryptographic ...

  2. Java Cipher类解密|笔记

    Cipher类为加密和解密提供密码功能 Cipher类可以构建多种加密算法,如DES.AES.Blowfish对称加密算法,以及RSA.DSA.DH等多种非对称加密算法 Cipher类是一个引擎类,它 ...

  3. javax.crypto.Cipher类--加密和解密

    javax.crypto.Cipher类提供加密和解密功能. 一.获得Cipher对象 通过调用Cipher类中的getInstance静态工厂方法得到Cipher对象. public static ...

  4. JCA - 核心类和接口 - Cipher类

    JCA - Cipher类 Cipher类 对称加密 VS. 非对称加密 块加密 VS. 流加密 操作模式 使用GCM模式的AES加密 创建Cipher 对象 初始化Cipher对象 数据加密和解密 ...

  5. 使用OpenSSL加密,使用Java解密,使​​用OpenSSL RSA公钥

    抽象 在2017年,我撰写了一个由三部分组成的系列文章,内容涉及选择最佳的哈希和加密算法. 在对该系列进行研究时,我学到了很多有关哈希和加密的知识. 我学到的最重要的事情是,尽管我必须对如何使用最安全 ...

  6. delphi7aes加密解密与java互转_跨语言(java vs python vs nodejs)的RSA加解密问题探讨

    多次被问到这样的问题: java服务端的rsa加密操作已经完成,返回一个16进制的字符串给python平台,但是在python进行私钥解密的时候发现行不通.... 前端python加密,后端用java ...

  7. node 加密解密模块_跨语言(java vs python vs nodejs)的RSA加解密问题探讨

    多次被问到这样的问题: java服务端的rsa加密操作已经完成,返回一个16进制的字符串给python平台,但是在python进行私钥解密的时候发现行不通.... 前端python加密,后端用java ...

  8. java js 非对称加密算法_Java加密技术(四)——非对称加密算法RSA

    Java非对称加密算法rsa 接下来我们介绍典型的非对称加密算法--RSA RSA 这种算法1978年就出现了,它是第一个既能用于数据加密也能用于数字签名的算法.它易于理解和操作,也很流行.算法的名字 ...

  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. Java笔记-非对称加密RSA的使用

    使用OpenSSL生成对应RSA私钥和RSA公钥: #rsa私钥: genrsa -out rsa_private_key.pem 1024 pkcs8 -topk8 -inform PEM -in ...

最新文章

  1. python有什么作用-大数据学习之python语言有什么作用?
  2. BZOJ.3277.串(广义后缀自动机)
  3. Wireshark EndPoints窗口
  4. java spring框架 注解_spring框架之注解的使用
  5. .NET Core 微信小程序退款——(统一退款)
  6. 201621123058 《java课程设计》第九周学习总结
  7. 多浏览器判断,切换及使用
  8. 8255A置位复位控制字
  9. Michael Feathers希望消除错误能驱动设计
  10. Java中InputStream 、 InputStreamReader 、 BufferedReader的区别
  11. 计算机组成原理(唐朔飞)--第一篇 概论
  12. RocketDock 安装
  13. 大数据的十大应用领域
  14. c++随笔-删除文件
  15. easypoi一对多导入_easypoi导入Excel最佳实践
  16. SCDM 实例教程:基本几何建模
  17. 普通家用电风扇电机绕组
  18. Cisco Packet Tracer Student抓取协议包简介
  19. 几款实用的内网穿透工具,推荐!
  20. 如何实现双向绑定?底层原理是什么?

热门文章

  1. MPB:南土所褚海燕组-土壤宏转录组学样本前处理与数据分析
  2. minecraft图标文件_如何在任何操作系统上查找Minecraft保存的游戏文件夹
  3. css-绘制平行四边形
  4. Python语言程序设计(嵩天老师)-期末考核2.1-快乐数字
  5. 章文嵩博士和他背后的负载均衡(LOAD BANLANCER)帝国
  6. BZOJ 2827 千山鸟飞绝 Treap
  7. 多个文本对比相似度分析
  8. 可以将每日计划以及日程提醒事项记录下来的待办清单便签有哪些
  9. word打开文档很久很慢_打开Office文档很慢的解决办法
  10. [PhotoShop]用ps制作遮罩图层