Java实现RSA算法的方法详解

 更新时间:2018年03月30日 15:02:57   作者:chengqiuming  
这篇文章主要介绍了Java实现RSA算法的方法,结合实例形式分析了RSA算法的原理、实现与使用方法,需要的朋友可以参考下

本文实例讲述了Java实现RSA算法的方法。分享给大家供大家参考,具体如下:

一 介绍

唯一广泛接受并实现
用于数据加密和数字签名
公钥加密、私钥解密
私钥加密、公钥解密

二 RSA参数说明

三 实现

package com.imooc.security.rsa;
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 ImoocRSA {
  private static String src = "cakin24 security rsa";
  public static void main(String[] args) {
    jdkRSA();
  }
  public static void jdkRSA() {
    try {
      //1.初始化密钥
      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 : " + Base64.encodeBase64String(rsaPublicKey.getEncoded()));
      System.out.println("Private Key : " + 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(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(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 : MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJcBeOb97IdkkirBmx3MOY5e4eRwh0uvC2BcNlY1rDo0lZ8ibR1bl1RJXWkHv7U0ASO/5DBlnnnGbQRtsJlsCPMCAwEAAQ==
Private Key : MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAlwF45v3sh2SSKsGbHcw5jl7h5HCHS68LYFw2VjWsOjSVnyJtHVuXVEldaQe/tTQBI7/kMGWeecZtBG2wmWwI8wIDAQABAkAdSkPRSl+ew3s2n+cemIZxfyYB0XHs1D84qapAfpixkUNvWL0A4ovrwsnwt4MEjAtWVTufNvTxIZcZdx+Q5DbBAiEA9TzzYMGRU+3mdlAx0ICF+NIqwvlqyvedKa4KSx55gVUCIQCdoeX6mqGRP78aQjYKWeogwliszjU5fN/LFvKZrcgBJwIhAMvbBLzzaykHY0IKW75kd/lkSyOUTY+20bAp+miDRqGZAiA6r36eeRkzqUbtcL8LxYPb5F79HtxD5dCvnIB/ZGp0uwIgWtXI7IxHjYCsNomSJdu1J3dU9KqQuW/eOHxrk/OgUYE=
私钥加密、公钥解密——加密 : VjkFsOiVeLvKES5RprhsJK9tdTzohdELLS7yluidCYEe7DkuCM9srj8kwadynHI4M0oLAfJhK6447hp7Ia8x7A==
私钥加密、公钥解密——解密:cakin24 security rsa
公钥加密、私钥解密——加密 : gAWl73UxHtO+EfKkpmfMdhtK0Vh7HB8n+30l1Hp8aAMIagD21h2x/q/Ns+soGsOXNovuNzaSGZenmZzcjB4VEA==
公钥加密、私钥解密——解密:cakin24 security rsa

五 应用场景

PS:关于加密解密感兴趣的朋友还可以参考本站在线工具:

在线RSA加密/解密工具:
http://tools.jb51.net/password/rsa_encode

文字在线加密解密工具(包含AES、DES、RC4等):
http://tools.jb51.net/password/txt_encode

MD5在线加密工具:
http://tools.jb51.net/password/CreateMD5Password

在线散列/哈希算法加密工具:
http://tools.jb51.net/password/hash_encrypt

在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.jb51.net/password/hash_md5_sha

在线sha1/sha224/sha256/sha384/sha512加密工具:
http://tools.jb51.net/password/sha_encode

更多关于java相关内容感兴趣的读者可查看本站专题:《Java数学运算技巧总结》、《Java数据结构与算法教程》、《Java字符与字符串操作技巧总结》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

相关文章

  • java注释转json插件开发实战详解

    java注释转json插件开发实战详解

    这篇文章主要为大家介绍了java注释转json插件开发实战详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Ribbon单独使用,配置自动重试,实现负载均衡和高可用方式

    Ribbon单独使用,配置自动重试,实现负载均衡和高可用方式

    这篇文章主要介绍了Ribbon单独使用,配置自动重试,实现负载均衡和高可用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • Mybatis中resultMap的Colum和property属性详解

    Mybatis中resultMap的Colum和property属性详解

    这篇文章主要介绍了Mybatis中resultMap的Colum和property属性,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教。
    2022-01-01
  • Spring cloud负载均衡@LoadBalanced & LoadBalancerClient

    Spring cloud负载均衡@LoadBalanced & LoadBalancerClient

    由于Spring cloud2020之后移除了Ribbon,直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件,我们讨论Spring负载均衡以Spring Cloud2020之后版本为主,学习Spring Cloud LoadBalance
    2023-11-11
  • 在Java编程中使用正则表达式的基本方法

    在Java编程中使用正则表达式的基本方法

    这篇文章主要介绍了在Java编程中使用正则表达式的基本方法,是Java入门学习中的基础知识,需要的朋友可以参考下
    2015-11-11
  • idea在工具栏中显示快速创建包和类的图标的详细步骤

    idea在工具栏中显示快速创建包和类的图标的详细步骤

    点击需要创建包或者类的位置,在点击对用的图标就可以快速创建类或者包了,下面小编给大家介绍idea在工具栏中显示快速创建包和类的图标的详细步骤,感兴趣的朋友一起看看吧
    2024-02-02
  • SpringBoot自动配置原理详解

    SpringBoot自动配置原理详解

    SpringBoot的诞生就是为了简化Spring中繁琐的XML配置,其本质依然还是Spring框架,使用SpringBoot之后可以不使用任何XML配置来启动一个服务,使得我们在使用微服务架构时可以更加快速的建立一个应用。本文将为具体介绍一下SpringBoot的原理,需要的可以参考一下
    2021-12-12
  • java伪泛型知识点详解

    java伪泛型知识点详解

    在本篇文章里小编给大家整理的是一篇关于java伪泛型知识点详解内容,有需要的朋友们可以跟着学习参考下。
    2021-06-06
  • Java并发 synchronized锁住的内容解析

    Java并发 synchronized锁住的内容解析

    这篇文章主要介绍了Java并发 synchronized锁住的内容解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • autoMapping和autoMappingBehavior的区别及说明

    autoMapping和autoMappingBehavior的区别及说明

    这篇文章主要介绍了autoMapping和autoMappingBehavior的区别及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01

最新评论