Java非對稱加密(公鑰加密,私鑰解密)

wgd7 9年前發布 | 3K 次閱讀 Java

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.security.Key;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import javax.crypto.Cipher;

/**

  • 公鑰加密,私鑰解密(非對稱加密)
  • */ public class AsymmetricEncryption {

    public static void main(String[] args) throws Exception {

     publicEnrypy();
     privateEncode();
    

    }

    /**

    • 加密的方法,使用公鑰進行加密
    • @throws Exception */ public static void publicEnrypy() throws Exception {

      Cipher cipher = Cipher.getInstance("RSA");

      KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");

      // 生成鑰匙對 KeyPair keyPair = keyPairGenerator.generateKeyPair();

      // 得到公鑰 Key publicKey = keyPair.getPublic();

      // 得到私鑰 Key privateKey = keyPair.getPrivate();

      // 設置為加密模式 cipher.init(Cipher.ENCRYPT_MODE, publicKey);

      // 對數據進行加密 byte[] result = cipher.doFinal("aaa".getBytes());

      //把私鑰保存到硬盤上 saveKey(privateKey);

      //把加密后的數據保存到硬盤上 saveData(result); }

      /**

    • 解密的方法,使用私鑰進行解密
    • @throws Exception */ public static void privateEncode() throws Exception { Cipher cipher = Cipher.getInstance("RSA");

      // 從硬盤中讀取私鑰 Key privateKey = loadKey();

      //設置為解密模式,用私鑰解密 cipher.init(Cipher.DECRYPT_MODE, privateKey);

      // 從硬盤中讀取加密后的數據 byte[] data = loadData();

      //對加密后的數據進行解密,返回解密后的結果 byte[] result = cipher.doFinal(data);

      System.out.println(new String(result)); }

      /**

    • 從硬盤中加載加密后的文件
    • @return
    • @throws FileNotFoundException
    • @throws IOException */ private static byte[] loadData() throws FileNotFoundException, IOException { FileInputStream fileInputStream = new FileInputStream(new File(

           "E://data.data"));
      

      ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

      byte[] buffer = new byte[1024]; int len = 0;

      while ((len = fileInputStream.read(buffer)) != -1) {

       outputStream.write(buffer, 0, len);
      

      }

      fileInputStream.close();

      return outputStream.toByteArray(); }

      /**

    • 從硬盤中加載私鑰
    • @return
    • @throws IOException
    • @throws FileNotFoundException
    • @throws ClassNotFoundException */ private static Key loadKey() throws IOException, FileNotFoundException,

       ClassNotFoundException {
      

      ObjectInputStream inputStream = new ObjectInputStream(

           new FileInputStream(new File("E://private_key")));
      

      Key privateKey = (Key) inputStream.readObject(); return privateKey; }

      /**

    • 把加密后的密文保存到硬盤上
    • @param result
    • @throws FileNotFoundException
    • @throws IOException */ private static void saveData(byte[] result) throws FileNotFoundException,

       IOException {
      

      FileOutputStream fileOutputStream = new FileOutputStream(new File(

           "E://data.data"));
      

      fileOutputStream.write(result); }

      /**

    • 把私鑰保存到硬盤上
    • @param privateKey
    • @throws IOException
    • @throws FileNotFoundException */ private static void saveKey(Key privateKey) throws IOException,
       FileNotFoundException {
      
      ObjectOutputStream outputStream = new ObjectOutputStream(
           new FileOutputStream(new File("E://private_key")));
      
      outputStream.writeObject(privateKey); }

}</pre>

 本文由用戶 wgd7 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!