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

RSA加密的方式和解密方式實(shí)現(xiàn)方法(推薦)

 更新時間:2017年06月12日 08:38:51   投稿:jingxian  
下面小編就為大家?guī)硪黄猂SA加密的方式和解密方式實(shí)現(xiàn)方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

RSAsecurity.java

package com.mstf.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 com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
 
/*RSA 工具類。提供加密,解密,生成密鑰對等方法。
RSA加密原理概述 
RSA的安全性依賴于大數(shù)的分解,公鑰和私鑰都是兩個大素數(shù)(大于100的十進(jìn)制位)的函數(shù)。
據(jù)猜測,從一個密鑰和密文推斷出明文的難度等同于分解兩個大素數(shù)的積 
密鑰的產(chǎn)生: 
 1.選擇兩個大素數(shù) p,q ,計(jì)算 n=p*q; 
 2.隨機(jī)選擇加密密鑰 e ,要求 e 和 (p-1)*(q-1)互質(zhì) 
 3.利用 Euclid 算法計(jì)算解密密鑰 d , 使其滿足 e*d = 1(mod(p-1)*(q-1)) (其中 n,d 也要互質(zhì)) 
 4:至此得出公鑰為 (n,e) 私鑰為 (n,d) 
 RSA速度 
 * 由于進(jìn)行的都是大數(shù)計(jì)算,使得RSA最快的情況也比DES慢上100倍,無論 是軟件還是硬件實(shí)現(xiàn)。 
 * 速度一直是RSA的缺陷。一般來說只用于少量數(shù)據(jù) 加密。*/
public class RSAsecurity {
 
 public static String src = "admin";
 
 public void priENpubDE() {
 
  try {
   // 初始化秘鑰
   KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
   // 秘鑰長度
   keyPairGenerator.initialize(1024);
   // 初始化秘鑰對
   KeyPair keyPair = keyPairGenerator.generateKeyPair();
   // 公鑰
   RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();
   // 私鑰
   RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();
 
   // 2.私鑰加密,公鑰解密----加密
   // 生成私鑰
   PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded());
   KeyFactory keyFactory = KeyFactory.getInstance("RSA");
   PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
   // Cipher類為加密和解密提供密碼功能,通過getinstance實(shí)例化對象
   Cipher cipher = Cipher.getInstance("RSA");
   // 初始化加密
   cipher.init(Cipher.ENCRYPT_MODE, privateKey);
   byte[] result = cipher.doFinal(src.getBytes());
   System.out.println("私鑰加密,公鑰解密----加密:" + Base64.encode(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));
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 
 }
 
 public void pubENpriDE() {
  try {
   // 1.初始化秘鑰
   KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
   // 秘鑰長度
   keyPairGenerator.initialize(512);
   // 初始化秘鑰對
   KeyPair keyPair = keyPairGenerator.generateKeyPair();
   // 公鑰
   RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();
   // 私鑰
   RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();
 
   // 2.公鑰加密,私鑰解密----加密
   X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(rsaPublicKey.getEncoded());
   KeyFactory keyFactory = KeyFactory.getInstance("RSA");
   PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
   // 初始化加密
   // Cipher類為加密和解密提供密碼功能,通過getinstance實(shí)例化對象
   Cipher cipher = Cipher.getInstance("RSA");
   cipher.init(Cipher.ENCRYPT_MODE, publicKey);
   // 加密字符串
   byte[] result = cipher.doFinal(src.getBytes());
   System.out.println("公鑰加密,私鑰解密----加密:" + Base64.encode(result));
 
   // 3.公鑰加密,私鑰解密-----解密
   PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded());
   keyFactory = KeyFactory.getInstance("RSA");
   PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
   // 初始化解密
   cipher.init(Cipher.DECRYPT_MODE, privateKey);
   // 解密字符串
   result = cipher.doFinal(result);
   System.out.println("公鑰加密,私鑰解密-----解密:" + new String(result));
 
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 
 }
}

RSAtest.java

package com.mstf.rsa;
 
import com.mstf.rsa.RSAsecurity;
 
public class RSAtest {
 public static void main(String[] args) {
  RSAsecurity rsAsecurity = new RSAsecurity();
  System.out.println("私鑰加密公鑰解密例:");
  rsAsecurity.priENpubDE();
  System.out.println("公鑰加密私鑰解密例:");
  rsAsecurity.pubENpriDE();
 }
}

以上這篇RSA加密的方式和解密方式實(shí)現(xiàn)方法(推薦)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • JavaWeb開發(fā)之JSTL標(biāo)簽庫的使用、 自定義EL函數(shù)、自定義標(biāo)簽(帶屬性的、帶標(biāo)簽體的)

    JavaWeb開發(fā)之JSTL標(biāo)簽庫的使用、 自定義EL函數(shù)、自定義標(biāo)簽(帶屬性的、帶標(biāo)簽體的)

    這篇文章主要介紹了JavaWeb開發(fā)之JSTL標(biāo)簽庫的使用、 自定義EL函數(shù)、自定義標(biāo)簽(帶屬性的、帶標(biāo)簽體的),需要的朋友可以參考下
    2017-02-02
  • java 一鍵部署 jar 包和 war 包

    java 一鍵部署 jar 包和 war 包

    這篇文章主要介紹了Java創(chuàng)建打包命令、創(chuàng)建啟動文件等功能實(shí)現(xiàn)Java一鍵部署 jar 包和 war 包,感興趣的下伙伴可以參考下文
    2021-09-09
  • Java實(shí)現(xiàn)圖片對比功能

    Java實(shí)現(xiàn)圖片對比功能

    個人從來沒有研究過圖像學(xué),也沒看過什么論文或者相關(guān)文檔,寫這個完全是靠google和百度,自己寫了個實(shí)驗(yàn)了下,測試用例也少,估計(jì)有大BUG的存在,所以看的人權(quán)當(dāng)學(xué)習(xí)交流,切勿生產(chǎn)使用。
    2014-09-09
  • java優(yōu)化if-else的11種方案

    java優(yōu)化if-else的11種方案

    If-Else結(jié)構(gòu)是一種常見的條件判斷語句,通過優(yōu)化If-Else結(jié)構(gòu),可以提高代碼的可讀性和執(zhí)行效率,本文主要介紹了java優(yōu)化if-else的11種方案,感興趣的可以了解一下
    2024-08-08
  • java中深復(fù)制知識點(diǎn)詳解

    java中深復(fù)制知識點(diǎn)詳解

    在本篇文章里小編給大家整理了關(guān)于java中深復(fù)制知識點(diǎn)詳解內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2020-12-12
  • SpringCloud微服務(wù)之Hystrix組件實(shí)現(xiàn)服務(wù)熔斷的方法

    SpringCloud微服務(wù)之Hystrix組件實(shí)現(xiàn)服務(wù)熔斷的方法

    微服務(wù)架構(gòu)特點(diǎn)就是多服務(wù),多數(shù)據(jù)源,支撐系統(tǒng)應(yīng)用。這樣導(dǎo)致微服務(wù)之間存在依賴關(guān)系。這篇文章主要介紹了SpringCloud微服務(wù)之Hystrix組件實(shí)現(xiàn)服務(wù)熔斷的方法,需要的朋友可以參考下
    2019-08-08
  • java中for和forEach的速度比較實(shí)例Demo

    java中for和forEach的速度比較實(shí)例Demo

    for循環(huán)中的循環(huán)條件中的變量只求一次值,而foreach語句是java5新增,在遍歷數(shù)組、集合的時候,foreach擁有不錯的性能,這篇文章主要給大家介紹了關(guān)于java中for和forEach速度比較的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • Idea公司真牛逼發(fā)行最適合程序員編程字體

    Idea公司真牛逼發(fā)行最適合程序員編程字體

    JetBrains年初的時候推出了一種新字體,即JetBrains Mono,它是專為開發(fā)人員設(shè)計(jì)的,非常不錯,喜歡的朋友快來體驗(yàn)吧
    2020-12-12
  • java如何自定義List中的sort()排序,用于日期排序

    java如何自定義List中的sort()排序,用于日期排序

    這篇文章主要介紹了java如何自定義List中的sort()排序,用于日期排序,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Springboot實(shí)現(xiàn)Java郵件任務(wù)過程解析

    Springboot實(shí)現(xiàn)Java郵件任務(wù)過程解析

    這篇文章主要介紹了Springboot實(shí)現(xiàn)Java郵件任務(wù)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09

最新評論