RSA加密算法-Java实现

    技术2022-05-19  51

    package test;import java.io.*;import java.security.*;

    import javax.crypto.*;import javax.crypto.spec.*;import java.security.spec.X509EncodedKeySpec;import java.security.spec.PKCS8EncodedKeySpec;import sun.misc.*;

    /*** <p>Title: RSA非对称型加密的公钥和私钥</p>* <p>Description: </p>* <p>Copyright: Copyright (c) 2003</p>* <p>Company: </p>* @author not attributable* @version 1.0*/

    public class RSAUtil {  private KeyPairGenerator kpg = null;  private KeyPair kp = null;  private PublicKey public_key = null;  private PrivateKey private_key = null;

       /**   * 构造函数   * @param in 指定密匙长度(取值范围:512~2048)   * @throws NoSuchAlgorithmException 异常   */  public RSAUtils(int in, String address) throws NoSuchAlgorithmException,      FileNotFoundException, IOException      {            kpg = KeyPairGenerator.getInstance("RSA"); //创建‘密匙对’生成器            kpg.initialize(in); //指定密匙长度(取值范围:512~2048)            kp = kpg.genKeyPair(); //生成‘密匙对’,其中包含着一个公匙和一个私匙的信息            public_key = kp.getPublic(); //获得公匙            private_key = kp.getPrivate(); //获得私匙                        sun.misc.BASE64Encoder  b64 =  new sun.misc.BASE64Encoder();            String pkStr = b64.encode(public_key.getEncoded());            String prStr = b64.encode(private_key.getEncoded());            System.out.print("pkStr length:" +pkStr.length() +pkStr);

                FileWriter fw=new FileWriter(address + "/private_key.dat");             fw.write(prStr);            fw.close();                        FileWriter  fw2 = new FileWriter(address + "/public_key.dat");             fw2.write(pkStr);            fw2.close();             }

       /**    *加密的方法    */   private  static String encrypt(String source) throws Exception{        /** 将文件中的公钥对象读出 */   FileReader  fr = new FileReader("c://public_key.dat");   BufferedReader br=new BufferedReader(fr);//建立BufferedReader对象,并实例化为br    String getPbKey = "";      while(true){       String aLine = br.readLine();       if(aLine==null)break;       getPbKey += aLine;   }      System.out.println( "myBuilderStr :  length: " +  getPbKey.length() +" 

    "+getPbKey );        BASE64Decoder   b64d = new  BASE64Decoder();      byte [] keyByte =  b64d.decodeBuffer(getPbKey);       X509EncodedKeySpec  x509ek  = new X509EncodedKeySpec(keyByte);      KeyFactory keyFactory = KeyFactory.getInstance("RSA");       PublicKey  publicKey = keyFactory.generatePublic(x509ek);            Cipher cipher = Cipher.getInstance("RSA");       cipher.init(Cipher.ENCRYPT_MODE,publicKey);      byte[] sbt = source.getBytes();     byte [] epByte = cipher.doFinal(sbt);      BASE64Encoder encoder = new BASE64Encoder();     String epStr =  encoder.encode(epByte);     return epStr;

     }      /**    *解密的方法    */   public static String decrypt(String cryptograph) throws Exception{         FileReader  fr = new FileReader("c://private_key.dat");    BufferedReader br=new BufferedReader(fr);//建立BufferedReader对象,并实例化为

    br     String getPvKey = "";       while(true){        String aLine = br.readLine();        if(aLine==null)break;        getPvKey += aLine;    }         BASE64Decoder   b64d = new  BASE64Decoder();        byte [] keyByte =  b64d.decodeBuffer(getPvKey);         PKCS8EncodedKeySpec  s8ek  = new PKCS8EncodedKeySpec(keyByte);        KeyFactory keyFactory = KeyFactory.getInstance("RSA");         PrivateKey  privateKey = keyFactory.generatePrivate(s8ek);                /** 得到Cipher对象对已用公钥加密的数据进行RSA解密 */    Cipher cipher = Cipher.getInstance("RSA");    cipher.init(Cipher.DECRYPT_MODE, privateKey);    BASE64Decoder decoder = new BASE64Decoder();    byte[] b1 = decoder.decodeBuffer(cryptograph);    /** 执行解密操作 */    byte[] b = cipher.doFinal(b1);    return new String(b); }

      public static void main(String[] args) {    try {        new KeyRSA(1024, "D:/");      //私匙和公匙保存到D盘下的文件中.        System.out.println("");        String getEptStr =  encrypt("fengyupeng");        System.out.println("getEptStr:"+getEptStr);        String  drpStr = decrypt(getEptStr);        System.out.println("drpStr:"+drpStr);    }    catch (IOException ex) { ex.printStackTrace();    }    catch (NoSuchAlgorithmException ex) { ex.printStackTrace();    }catch(Exception ex){ ex.printStackTrace();    }

      }    

    }


    最新回复(0)