Java実装のRSA暗号解読アルゴリズムの例

5199 ワード

この例では、Javaによって実装される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        ,  RSA      
    KeyPairGenerator gen = KeyPairGenerator.getInstance("RSA");
    //          ,     1024 
    gen.initialize(1024);
//    //      
//    SecureRandom random = new SecureRandom();
//    gen.initialize(1024,random);
    //        ,   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 = "     ";
  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("       : " + new String(puk, utf));
    byte[] dpuk = handleData(prikey, puk, 0);
    System.out.println("       : " + new String(dpuk, utf));
    msg = "jd# 0  ¥ +=# ";
    //           
    System.out.println("  : " + msg);
    byte[] prk = handleData(prikey, msg.getBytes(utf), 1);
    System.out.println("       : " + new String(prk, utf));
    byte[] dprk = handleData(pubkey, prk, 0);
    System.out.println("       : " + 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:暗号解読に興味のある方は、当駅のオンラインツールも参考にしてください.
文字オンライン暗号解読ツール(AES、DES、RC 4などを含む):http://tools.jb51.net/password/txt_encode
MD 5オンライン暗号化ツール:http://tools.jb51.net/password/CreateMD5Password
オンラインハッシュ/ハッシュアルゴリズム暗号化ツール:http://tools.jb51.net/password/hash_encrypt
オンラインMD 5/hash/SAH-1/SAH-2/SAH-256/SAH-512/SAH-3/RIPEMD-160暗号化ツール:http://tools.jb51.net/password/hash_md5_sha
オンラインsha 1/sha 224/sha 256/sha 384/sha 512暗号化ツール:http://tools.jb51.net/password/sha_encode
Javaに関する詳細について興味のある読者は、「Java数学演算テクニックまとめ」、「Javaデータ構造とアルゴリズムチュートリアル」、「Java文字と文字列操作テクニックまとめ」、「Java操作DOMノードテクニックまとめ」、「Javaキャッシュ操作テクニックまとめ」のトピックを参照してください.
本文で述べたjavaプログラム設計に役立つことを願っています.