RSA非对称加密解密例子

来源:互联网 发布:电子阅读器知乎 编辑:程序博客网 时间:2024/05/16 17:17

------要加密的内容

    String encryptText = "encryptText";

    keyPairGen.initialize(1024);
    KeyPair keyPair = keyPairGen.generateKeyPair();
    // Generate keys
    RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
    RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
    //存放公钥密钥路径。
    FileOutputStream pubfos = new FileOutputStream("E:/xlmPublicKey.dat");
    ObjectOutputStream puboos = new ObjectOutputStream(pubfos);
    //生成公钥密钥
    puboos.writeObject(publicKey);
    puboos.close();
    
    //保存私钥文件
    FileOutputStream prifos = new FileOutputStream("E:/xlmPrivateKey.dat");
    ObjectOutputStream prioos = new ObjectOutputStream(prifos);
    prioos.writeObject(privateKey);
    prioos.close();

   

---------采用公钥进行加密

    byte[] e = encrypt.encrypt2(privateKey, encryptText.getBytes());
    byte[] de = encrypt.decrypt2(publicKey, e);
    System.out.println(encrypt.bytesToString(e));
    System.out.println(encrypt.bytesToString(de));
    
    //保存密文
    FileOutputStream lfos = new FileOutputStream("E:/license.dat");
    DataOutputStream ldos=new DataOutputStream(lfos);
    ldos.write(e);

    ldos.close();




解密:

RSAEncrypt encrypt = new RSAEncrypt();
            // 生成实现指定摘要算法的 KeyPairGenerator 对象。RSA摘要
            KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
            
            FileInputStream pubfis = new FileInputStream("E:/xlmPublicKey.dat");
            ObjectInputStream puboos = new ObjectInputStream(pubfis);
            //生成公钥密钥
            RSAPublicKey pk=(RSAPublicKey)puboos.readObject();
            puboos.close();
            
            

            byte[] b = new byte[128];
            int len = 0;
            FileInputStream lfis = new FileInputStream("E:/license.dat");
            DataInputStream ldos=new DataInputStream(lfis);
            
            while ((len = ldos.read(b)) != -1) {
                ldos.read(b, 0, len);
            }
            byte[] de = encrypt.decrypt2(pk, b);
            System.out.println(encrypt.bytesToString(de));








/**
* 私钥加密
*
* @return byte[]
*/
protected byte[] encrypt2(RSAPrivateKey privateKey, byte[] obj) {
   if (privateKey != null) {
    try {
     Cipher cipher = Cipher.getInstance("RSA");
//     ENCRYPT_MODE : 用于将 cipher 初始化为加密模式的常量。
     cipher.init(Cipher.ENCRYPT_MODE, privateKey);
     return cipher.doFinal(obj);
    } catch (Exception e) {
     e.printStackTrace();
    }
   }
   return null;
}

/**
* Basic decrypt method 公钥解密
*
* @return byte[]
*/
protected byte[] decrypt2(RSAPublicKey publicKey, byte[] obj) {
   if (publicKey != null) {
    try {
     Cipher cipher = Cipher.getInstance("RSA");
//     DECRYPT_MODE : 用于将 cipher 初始化为解密模式的常量。
     cipher.init(Cipher.DECRYPT_MODE, publicKey);
     return cipher.doFinal(obj);
    } catch (Exception e) {
     e.printStackTrace();
    }
   }

   return null;
}