最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實(shí)現(xiàn)的RSA加密解密算法示例

 更新時(shí)間:2018年01月20日 12:20:37   作者:csdn_liuliu  
這篇文章主要介紹了Java實(shí)現(xiàn)的RSA加密解密算法,結(jié)合實(shí)例形式分析了java RAS加密解密算法的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下

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

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.security.Key;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.SecureRandom;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import javax.crypto.Cipher;
public class RSAUtils{
 public static String makekeyfile(String pubkeyfile, String prikeyfile) {
  String result = "生成公私鑰文件失敗";
  try{
    // KeyPairGenerator用于生成公私鑰對(duì),基于RSA算法生成對(duì)象
    KeyPairGenerator gen = KeyPairGenerator.getInstance("RSA");
    // 初始化密鑰對(duì)生成器,密鑰大小為1024位
    gen.initialize(1024);
//    //生成強(qiáng)隨機(jī)數(shù)
//    SecureRandom random = new SecureRandom();
//    gen.initialize(1024,random);
    // 生成一個(gè)密鑰對(duì),保存在pair中
    KeyPair pair = gen.generateKeyPair();
    // 得到私鑰
    RSAPrivateKey priKey = (RSAPrivateKey) pair.getPrivate();
    // 得到公鑰
    RSAPublicKey pubKey = (RSAPublicKey) pair.getPublic();
    // 生成私鑰文件
    ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(prikeyfile));
    os.writeObject(priKey);
    os.flush();
    os.close();
    //生成公鑰文件
    os = new ObjectOutputStream(new FileOutputStream(pubkeyfile));
    os.writeObject(pubKey);
    os.flush();
    os.close();
    result = "生成公鑰文件【"+pubkeyfile+"】生成私鑰文件【"+prikeyfile+"】";
  }catch(Exception e){
  e.printStackTrace();
  }
  return result;
  }
  public static void main(String[] args) {
  try{
    String pubfile = "F:/images/pub.key";
    String prifile = "F:/images/pri.key";
    String result = null;
    //result = makekeyfile(pubfile, prifile);
    result = markPuPra(pubfile, prifile);
    System.out.println(result);
  }catch(Exception e){
  e.printStackTrace();
  }
  }
  public static String markPuPra(String pubfile,String prifile){
  String results = "加解密出錯(cuò)";
  try{
    ObjectInputStream os = new ObjectInputStream(new FileInputStream(pubfile));
    RSAPublicKey pubkey = (RSAPublicKey) os.readObject();
    os.close();
    os = new ObjectInputStream(new FileInputStream(prifile));
    RSAPrivateKey prikey = (RSAPrivateKey) os.readObject();
    os.close();
    String utf = "UTF-8";
    String msg = "##中國%%的)人@+_";
    // 使用公鑰加密私鑰解密
    System.out.println("原文: " + msg);
    byte[] puk = handleData(pubkey, msg.getBytes(utf), 1);
    System.out.println("加密后文件數(shù)據(jù): " + new String(puk, utf));
    byte[] dpuk = handleData(prikey, puk, 0);
    System.out.println("解密后文件數(shù)據(jù): " + new String(dpuk, utf));
    msg = "jd#我0們的¥人+=#新";
    // 使用私鑰加密公鑰解密
    System.out.println("原文: " + msg);
    byte[] prk = handleData(prikey, msg.getBytes(utf), 1);
    System.out.println("加密后文件數(shù)據(jù): " + new String(prk, utf));
    byte[] dprk = handleData(pubkey, prk, 0);
    System.out.println("解密后文件數(shù)據(jù): " + new String(dprk, utf));
    results = "加解密完成";
  }catch(Exception e){
  e.printStackTrace();
  }
  return results;
  }
  /**
   *
   * @param k
   * @param data
   * @param encrypt 1 加密 0解密
   * @return
   * @throws Exception
   */
  public static byte[] handleData(Key key, byte[] data, int type) throws Exception {
    if (key != null) {
      Cipher ci = Cipher.getInstance("RSA");
      if (type == 1) {
        ci.init(Cipher.ENCRYPT_MODE, key);
        byte[] res = ci.doFinal(data);
        return res;
      }
      if (type == 0) {
        ci.init(Cipher.DECRYPT_MODE, key);
        byte[] res = ci.doFinal(data);
        return res;
      }
    }
    return null;
  }
}

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

文字在線加密解密工具(包含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ù)學(xué)運(yùn)算技巧總結(jié)》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java字符與字符串操作技巧總結(jié)》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》和《Java緩存操作技巧匯總

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

相關(guān)文章

  • java虛擬機(jī)學(xué)習(xí)筆記進(jìn)階篇

    java虛擬機(jī)學(xué)習(xí)筆記進(jìn)階篇

    在本篇內(nèi)容里小編給大家分享了關(guān)于java虛擬機(jī)學(xué)習(xí)筆記的進(jìn)階內(nèi)容,需要的朋友們跟著學(xué)習(xí)下。
    2019-06-06
  • Java接口和抽象類有什么區(qū)別

    Java接口和抽象類有什么區(qū)別

    這篇文章主要介紹了Java接口和抽象類有什么區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • 簡單了解Spring中常用工具類

    簡單了解Spring中常用工具類

    這篇文章主要介紹了簡單了解Spring中常用工具類,非常全面,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • 一文弄懂Mybatis中介者模式

    一文弄懂Mybatis中介者模式

    本文主要介紹了一文弄懂Mybatis中介者模式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 完美解決因數(shù)據(jù)庫一次查詢數(shù)據(jù)量過大導(dǎo)致的內(nèi)存溢出問題

    完美解決因數(shù)據(jù)庫一次查詢數(shù)據(jù)量過大導(dǎo)致的內(nèi)存溢出問題

    今天小編就為大家分享一篇完美解決因數(shù)據(jù)庫一次查詢數(shù)據(jù)量過大導(dǎo)致的內(nèi)存溢出問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • 關(guān)于重寫equals()方法和hashCode()方法及其簡單的應(yīng)用

    關(guān)于重寫equals()方法和hashCode()方法及其簡單的應(yīng)用

    這篇文章主要介紹了關(guān)于重寫equals()方法和hashCode()方法及其簡單的應(yīng)用,網(wǎng)上的知識(shí)有些可能是錯(cuò)誤的,關(guān)于?equals()?方法的理解,大家討論不一樣,需要的朋友可以參考下
    2023-04-04
  • java自定義任務(wù)類定時(shí)執(zhí)行任務(wù)示例 callable和future接口使用方法

    java自定義任務(wù)類定時(shí)執(zhí)行任務(wù)示例 callable和future接口使用方法

    Callable是類似于Runnable的接口,實(shí)現(xiàn)Callable接口的類和實(shí)現(xiàn)Runnable的類都是可被其它線程執(zhí)行的任務(wù)
    2014-01-01
  • 使用Java實(shí)現(xiàn)在Excel中創(chuàng)建下拉列表

    使用Java實(shí)現(xiàn)在Excel中創(chuàng)建下拉列表

    下拉列表(下拉框)可以確保用戶僅從預(yù)先給定的選項(xiàng)中進(jìn)行選擇,這樣不僅能減少數(shù)據(jù)輸入錯(cuò)誤,還能節(jié)省時(shí)間提高效率,下面我們就來看看如何在java中利用免費(fèi)庫實(shí)現(xiàn)創(chuàng)建下拉列表吧
    2024-03-03
  • Flink支持哪些數(shù)據(jù)類型?

    Flink支持哪些數(shù)據(jù)類型?

    Apache Flink 以其獨(dú)特的方式來處理數(shù)據(jù)類型以及序列化,這種方式包括它自身的類型描述符、泛型類型提取以及類型序列化框架.本文檔描述了它們背后的概念和基本原理,需要的朋友可以參考下
    2021-06-06
  • MybatisPlus中selectPage的使用方法

    MybatisPlus中selectPage的使用方法

    本文主要介紹了MybatisPlus中selectPage的使用方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05

最新評(píng)論

木兰县| 青阳县| 台安县| 淮南市| 泌阳县| 辉县市| 潍坊市| 闽侯县| 安平县| 泸西县| 万州区| 天台县| 乌鲁木齐市| 噶尔县| 长岛县| 北安市| 崇礼县| 河池市| 绥中县| 那曲县| 江阴市| 清涧县| 湖州市| 双柏县| 海城市| 南部县| 南开区| 咸丰县| 武功县| 高平市| 海盐县| 湖南省| 文山县| 页游| 松滋市| 永吉县| 孟州市| 大厂| 三明市| 高要市| 牟定县|