java中RSA的加密与解密

简介: java中RSA的加密与解密

@[TOC]

一、简介

  • 背景:RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的 [1] 。
  • 特点:每次输入的密码和账号经过加密后都不一样,而md5加密是一样的。
  • 注意:公钥和私钥必须是配对的!

    二、生成钥匙对儿

    public void generateKeyPair() throws NoSuchAlgorithmException{
         
          KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
          keyPairGenerator.initialize(1024);
          KeyPair keyPair = keyPairGenerator.generateKeyPair();
          RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();
          RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();
          //生成的公钥
          String publicKeyString = Base64.encodeBase64String(rsaPublicKey.getEncoded());
          //生成的私钥
          String privateKeyString = Base64.encodeBase64String(rsaPrivateKey.getEncoded());
      }
    

    三、公钥加密

    /**
       * 公钥加密
       *
       * @param publicKeyString 公钥
       * @param text 待加密的文本
       * @return 加密后的文本
       */
      public static String encryptByPublicKey(String publicKeyString, String text) throws Exception
      {
         
          X509EncodedKeySpec x509EncodedKeySpec2 = new X509EncodedKeySpec(Base64.decodeBase64(publicKeyString));
          KeyFactory keyFactory = KeyFactory.getInstance("RSA");
          PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec2);
          Cipher cipher = Cipher.getInstance("RSA");
          cipher.init(Cipher.ENCRYPT_MODE, publicKey);
          byte[] result = cipher.doFinal(text.getBytes());
          return Base64.encodeBase64String(result);
      }
    

    四、私钥解密

    /**
       * 私钥解密
       *
       * @param privateKeyString 私钥
       * @param text 待解密的文本
       * @return 解密后的文本
       */
      public static String decryptByPrivateKey(String privateKeyString, String text) throws Exception
      {
         
          PKCS8EncodedKeySpec pkcs8EncodedKeySpec5 = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyString));
          KeyFactory keyFactory = KeyFactory.getInstance("RSA");
          PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec5);
          Cipher cipher = Cipher.getInstance("RSA");
          cipher.init(Cipher.DECRYPT_MODE, privateKey);
          byte[] result = cipher.doFinal(Base64.decodeBase64(text));
          return new String(result);
      }
    

    五 、需要的jar包依赖

    <!--常用工具类 -->
          <dependency>
              <groupId>org.apache.commons</groupId>
              <artifactId>commons-lang3</artifactId>
          </dependency>
    
    或者直接
    <dependency>
       <groupId>commons-codec</groupId>
       <artifactId>commons-codec</artifactId>
    </dependency>
    
目录
相关文章
|
10天前
|
算法 安全 网络安全
非对称加密算法RSA
RSA是一种基于数论的非对称加密算法,依赖大整数质因数分解的困难性保证安全性。它生成公钥和私钥,公钥加密,私钥解密,适用于数据加密、数字签名和互联网安全等领域。尽管计算效率低、适合小量数据处理,但由于其兼容性、安全性和广泛应用于SSL/TLS、数字签名等,RSA仍是主流加密算法之一。
13 2
|
2月前
|
算法 Java 数据安全/隐私保护
java MD5 32位加密
java MD5 32位加密
18 0
|
16天前
|
存储 算法 安全
加密解密(RSA)非对称加密算法
加密解密(RSA)非对称加密算法
|
26天前
|
Java 数据安全/隐私保护
java base64 加密 解密
java base64 加密 解密
|
2月前
|
编解码 算法 安全
【Java技术专题】「入门到精通系列」深入探索Java技术中常用到的六种加密技术和实现
【Java技术专题】「入门到精通系列」深入探索Java技术中常用到的六种加密技术和实现
48 0
|
2月前
|
安全 Java 数据安全/隐私保护
提升 Java 编程安全性 - 代码加密混淆工具的重要性和应用
提升 Java 编程安全性 - 代码加密混淆工具的重要性和应用
|
存储 算法 前端开发
一文带你学会国产加密算法SM4的java实现方案
今天给大家带来一个国产SM4加密解密算法的java后端解决方案,代码完整,可以直接使用,希望给大家带来帮助,尤其是做政府系统的开发人员,可以直接应用到项目中进行加密解密。
2369 1
|
2天前
|
存储 缓存 前端开发
Java串口通信技术探究3:RXTX库线程 优化系统性能的SerialPortEventListener类
Java串口通信技术探究3:RXTX库线程 优化系统性能的SerialPortEventListener类
13 3
|
2天前
|
Java
JAVA难点包括异常处理、多线程、泛型和反射,以及复杂的分布式系统知识
JAVA难点包括异常处理、多线程、泛型和反射,以及复杂的分布式系统知识。入坑JAVA因它的面向对象特性、平台无关性、强大的标准库和活跃的社区支持。
13 2
|
2天前
|
Java 调度 开发者
Java中的多线程编程:基础与实践
【5月更文挑战第2天】本文将深入探讨Java中的多线程编程,从基础概念到实际应用,为读者提供全面的理解和实践指导。我们将首先介绍线程的基本概念和重要性,然后详细解析Java中实现多线程的两种主要方式:继承Thread类和实现Runnable接口。接着,我们将探讨线程同步的问题,包括synchronized关键字和Lock接口的使用。最后,我们将通过一个实际的生产者-消费者模型来演示多线程编程的实践应用。