亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java 中RSA的方式實現(xiàn)非對稱加密的實例

 更新時間:2017年08月07日 09:47:22   作者:Sahadev_  
這篇文章主要介紹了java 中RSA的方式實現(xiàn)非對稱加密的實例的相關(guān)資料,這里提供實例幫助大家理解這部分知識,需要的朋友可以參考下

java 中RSA的方式實現(xiàn)非對稱加密的實例

RSA通俗理解:

你只要去想:既然是加密,那肯定是不希望別人知道我的消息,所以只有我才能解密,所以可得出公鑰負責加密,私鑰負責解密;同理,既然是簽名,那肯定是不希望有人冒充我發(fā)消息,只有我才能發(fā)布這個簽名,所以可得出私鑰負責簽名,公鑰負責驗證。

實現(xiàn)代碼:

package com.sahadev; 
 
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 RSA { 
 
  public static void main(String[] args) { 
    JDKRSA(); 
  } 
 
  public static void JDKRSA() { 
    try { 
      // 構(gòu)建密鑰對兒 
      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 : " + org.apache.commons.codec.binary.Base64.encodeBase64String(rsaPublicKey.getEncoded())); 
      System.out.println("Private Key : " + org.apache.commons.codec.binary.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(DH.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(DH.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(); 
    } 
  } 
} 

附上輸出結(jié)果: 

Public Key : MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJcFshoP5xm94r2aTbe++aMZMzJtXHxDpqmMQ9aL1cEthr2Xtac+Eckv32Kzb4R8C/6vObNBfd8sWx9FU5N2y6cCAwEAAQ== 
Private Key : MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAlwWyGg/nGb3ivZpNt775oxkzMm1cfEOmqYxD1ovVwS2GvZe1pz4RyS/fYrNvhHwL/q85s0F93yxbH0VTk3bLpwIDAQABAkBdAA7rabug6IRGykztyFcmjxAuD5aSl358jnoAFuCtMo4skfxh1vR4ENFUE0Lt0zJ3CKVH0o9UQDNG0r4jeOGRAiEA3KuXps9OG0AXuxLggg0e7B1Os5C3gNrH2fMqAPjtpY0CIQCvM4EPfdrjjNQiM0ATVBT5jZnw3PRu33pdyISWuoMHAwIgDOLMSUZjxj2Y5Si2CYIgoyMW/G9f99tOvlBvzHy8y+UCIF94MVu/uQdGNlJsmv3tU4CpKLmXrZq9LHDuU1HPUJcBAiEAy/0OS2Q9EBfmPwhsGXF4WMxj4wG0xzNFWxSeZB0qxzk= 
私鑰加密,公鑰解密------加密 : NXF87irBEmK3x/fW7IWY4GuA8AP4Rvj4DJSp2Cjjsoo5X/ScHHKdvYtlM+9TOUAvMeuKWk5WH70g53q7+E73zg== 
私鑰加密,公鑰解密------解密 : Hello,sahadev! 
公鑰加密,私鑰解密------加密 : hjL8928jCbNtVCRhKaYAxQNJmiIAktBskhff2I01pbaHtfGH6GJTcP1i345/3I9OzwoVFxvi/oXgVJsIsg7MOQ== 
公鑰加密,私鑰解密------解密 : Hello,sahadev! 

如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • Java使用httpRequest+Jsoup爬取紅藍球號碼

    Java使用httpRequest+Jsoup爬取紅藍球號碼

    本文將結(jié)合實例代碼,介紹Java使用httpRequest+Jsoup爬取紅藍球號碼,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • 基于idea把springboot項目部署到docker

    基于idea把springboot項目部署到docker

    這篇文章主要介紹了基于idea把springboot項目部署到docker,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • Mybatis緩存機制詳解與實例分析

    Mybatis緩存機制詳解與實例分析

    Mybatis的緩存分為一級緩存和二級緩存,一級緩存是SqlSession級別的而二級緩存是mapper級別的,本文詳細的介紹了Mybatis緩存機制與實例分析,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2023-11-11
  • Java Shutdown Hook場景使用及源碼分析

    Java Shutdown Hook場景使用及源碼分析

    shutdown hook 就是一個簡單的已初始化但是未啟動的線程,本文詳細的介紹了Java Shutdown Hook場景使用及源碼分析,感興趣的朋友可以參考一下
    2021-06-06
  • java高級應(yīng)用:線程池的全面講解(干貨)

    java高級應(yīng)用:線程池的全面講解(干貨)

    這篇文章主要介紹了java高級應(yīng)用:線程池的全面講解(干貨),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Javaweb基礎(chǔ)入門requse原理與使用

    Javaweb基礎(chǔ)入門requse原理與使用

    Request對象的作用是與客戶端交互,收集客戶端的Form、Cookies、超鏈接,或者收集服務(wù)器端的環(huán)境變量,接下來本篇將詳細講述
    2021-11-11
  • Mybatis實體類屬性與數(shù)據(jù)庫不一致解決方案

    Mybatis實體類屬性與數(shù)據(jù)庫不一致解決方案

    這篇文章主要介紹了Mybatis實體類屬性與數(shù)據(jù)庫不一致解決方案,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • Java使用Condition實現(xiàn)精準喚醒線程詳解

    Java使用Condition實現(xiàn)精準喚醒線程詳解

    這篇文章主要為大家詳細介紹了Java如何使用Condition實現(xiàn)精準喚醒線程效果,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-02-02
  • SpringBoot配置文件的優(yōu)先級順序、加載順序、bootstrap.yml與application.yml區(qū)別及說明

    SpringBoot配置文件的優(yōu)先級順序、加載順序、bootstrap.yml與application.yml區(qū)別及說明

    在SpringBoot中,配置文件的優(yōu)先級順序是:application-{profile}.yml或.properties > application.yml或.properties > bootstrap.yml或.properties,{profile}代表不同環(huán)境,如dev、test、prod,加載順序是先加載bootstrap文件
    2024-09-09
  • 用C++實現(xiàn)求N!中末尾0的個數(shù)的方法詳解

    用C++實現(xiàn)求N!中末尾0的個數(shù)的方法詳解

    這篇文章主要介紹了用C++實現(xiàn)求N!中末尾0的個數(shù)的方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評論