欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java實現(xiàn)RSA算法的方法詳解

 更新時間:2018年03月30日 15:02:57   作者:chengqiuming  
這篇文章主要介紹了Java實現(xiàn)RSA算法的方法,結(jié)合實例形式分析了RSA算法的原理、實現(xiàn)與使用方法,需要的朋友可以參考下

本文實例講述了Java實現(xiàn)RSA算法的方法。分享給大家供大家參考,具體如下:

一 介紹

唯一廣泛接受并實現(xiàn)
用于數(shù)據(jù)加密和數(shù)字簽名
公鑰加密、私鑰解密
私鑰加密、公鑰解密

二 RSA參數(shù)說明

三 實現(xiàn)

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();
    }
  }
}

四 實現(xiàn)效果

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

五 應(yīng)用場景

PS:關(guān)于加密解密感興趣的朋友還可以參考本站在線工具:

在線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

更多關(guān)于java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)學運算技巧總結(jié)》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java字符與字符串操作技巧總結(jié)》、《Java操作DOM節(jié)點技巧總結(jié)》和《Java緩存操作技巧匯總

希望本文所述對大家java程序設(shè)計有所幫助。

相關(guān)文章

  • 基于springboot設(shè)置Https請求過程解析

    基于springboot設(shè)置Https請求過程解析

    這篇文章主要介紹了基于springboot設(shè)置Https請求過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • java 獲取冒號后面的參數(shù)(正則)實現(xiàn)代碼

    java 獲取冒號后面的參數(shù)(正則)實現(xiàn)代碼

    這篇文章主要介紹了java 獲取冒號后面的參數(shù)(正則)實現(xiàn)代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • SpringBoot實現(xiàn)第一次啟動時自動初始化數(shù)據(jù)庫的方法

    SpringBoot實現(xiàn)第一次啟動時自動初始化數(shù)據(jù)庫的方法

    本文主要介紹了SpringBoot實現(xiàn)第一次啟動時自動初始化數(shù)據(jù)庫的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05
  • Java設(shè)計模式之java觀察者模式詳解

    Java設(shè)計模式之java觀察者模式詳解

    這篇文章主要介紹了Java經(jīng)典設(shè)計模式之觀察者模式,簡單分析了觀察者模式的概念、原理并結(jié)合實例形式給出了java觀察者模式的具體用法與相關(guān)注意事項,需要的朋友可以參考下
    2021-09-09
  • 詳解大數(shù)據(jù)處理引擎Flink內(nèi)存管理

    詳解大數(shù)據(jù)處理引擎Flink內(nèi)存管理

    Flink是jvm之上的大數(shù)據(jù)處理引擎,jvm存在java對象存儲密度低、full gc時消耗性能,gc存在stw的問題,同時omm時會影響穩(wěn)定性。針對頻繁序列化和反序列化問題flink使用堆內(nèi)堆外內(nèi)存可以直接在一些場景下操作二進制數(shù)據(jù),減少序列化反序列化消耗。本文帶你詳細理解其原理。
    2021-05-05
  • java中transient關(guān)鍵字的作用解析

    java中transient關(guān)鍵字的作用解析

    這篇文章主要介紹了java中transient關(guān)鍵字的作用解析,日常業(yè)務(wù)中,為了安全起見,有些敏感信息我們不希望在網(wǎng)絡(luò)間被傳輸可以使用transient對字段進行修飾,不進行序列化,則返回獲取到的字段為null,需要的朋友可以參考下
    2023-11-11
  • java?log?is判斷引發(fā)的一系列事件解析

    java?log?is判斷引發(fā)的一系列事件解析

    這篇文章主要為大家介紹了java?log?is判斷引發(fā)的一系列事件解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • HttpUtils 發(fā)送http請求工具類(實例講解)

    HttpUtils 發(fā)送http請求工具類(實例講解)

    下面小編就為大家?guī)硪黄狧ttpUtils 發(fā)送http請求工具類(實例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • 如何解決SpringMVC不能訪問html頁面

    如何解決SpringMVC不能訪問html頁面

    這篇文章主要介紹了如何解決SpringMVC不能訪問html頁面問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • SpringBoot獲取配置文件內(nèi)容的幾種方式總結(jié)

    SpringBoot獲取配置文件內(nèi)容的幾種方式總結(jié)

    大家都知道SpringBoot獲取配置文件的方法有很多,下面這篇文章主要給大家介紹了關(guān)于SpringBoot獲取配置文件內(nèi)容的幾種方式,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-02-02

最新評論