java rsa api_JAVA生成RSA非对称型加密的公钥和私钥(利用JAVA API)

packagecom.paul.module.common.util;importsun.misc.BASE64Decoder;importsun.misc.BASE64Encoder;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.ObjectInputStream;importjava.io.ObjectOutputStream;importjava.security.Key;importjava.security.KeyPair;importjava.security.KeyPairGenerator;importjavax.crypto.Cipher;public classRSASecurityUtil2 {/**指定加密算法为RSA*/

private static final String ALGORITHM = "RSA";/**密钥长度,用来初始化*/

private static final int KEYSIZE = 1024;/**指定公钥存放文件*/

private static String PUBLIC_KEY_FILE = "PublicKey";/**指定私钥存放文件*/

private static String PRIVATE_KEY_FILE = "PrivateKey";/*** 生成密钥对

*@throwsException*/

private static void generateKeyPair() throwsException {///** RSA算法要求有一个可信任的随机数源 *///SecureRandom secureRandom = new SecureRandom();

/**为RSA算法创建一个KeyPairGenerator对象*/KeyPairGenerator keyPairGenerator=KeyPairGenerator.getInstance(ALGORITHM);/**利用上面的随机数据源初始化这个KeyPairGenerator对象*/

//keyPairGenerator.initialize(KEYSIZE, secureRandom);

keyPairGenerator.initialize(KEYSIZE);/**生成密匙对*/KeyPair keyPair=keyPairGenerator.generateKeyPair();/**得到公钥*/Key publicKey=keyPair.getPublic();/**得到私钥*/Key privateKey=keyPair.getPrivate();

ObjectOutputStream oos1= null;

ObjectOutputStream oos2= null;try{/**用对象流将生成的密钥写入文件*/oos1= new ObjectOutputStream(newFileOutputStream(PUBLIC_KEY_FILE));

oos2= new ObjectOutputStream(newFileOutputStream(PRIVATE_KEY_FILE));

oos1.writeObject(publicKey);

oos2.writeObject(privateKey);

}catch(Exception e) {throwe;

}finally{/**清空缓存,关闭文件输出流*/oos1.close();

oos2.close();

}

}/*** 加密方法

*@paramsource 源数据

*@return*@throwsException*/

public static String encrypt(String source) throwsException {

generateKeyPair();

Key publicKey;

ObjectInputStream ois= null;try{/**将文件中的公钥对象读出*/ois= new ObjectInputStream(newFileInputStream(

PUBLIC_KEY_FILE));

publicKey=(Key) ois.readObject();

}catch(Exception e) {throwe;

}finally{

ois.close();

}/**得到Cipher对象来实现对源数据的RSA加密*/Cipher cipher=Cipher.getInstance(ALGORITHM);

cipher.init(Cipher.ENCRYPT_MODE, publicKey);byte[] b =source.getBytes();/**执行加密操作*/

byte[] b1 =cipher.doFinal(b);

BASE64Encoder encoder= newBASE64Encoder();returnencoder.encode(b1);

}/*** 解密算法

*@paramcryptograph 密文

*@return*@throwsException*/

public static String decrypt(String cryptograph) throwsException {

Key privateKey;

ObjectInputStream ois= null;try{/**将文件中的私钥对象读出*/ois= new ObjectInputStream(newFileInputStream(

PRIVATE_KEY_FILE));

privateKey=(Key) ois.readObject();

}catch(Exception e) {throwe;

}finally{

ois.close();

}/**得到Cipher对象对已用公钥加密的数据进行RSA解密*/Cipher cipher=Cipher.getInstance(ALGORITHM);

cipher.init(Cipher.DECRYPT_MODE, privateKey);

BASE64Decoder decoder= newBASE64Decoder();byte[] b1 =decoder.decodeBuffer(cryptograph);/**执行解密操作*/

byte[] b =cipher.doFinal(b1);return newString(b);

}public static void main(String[] args) throwsException {

String source= "恭喜发财!";//要加密的字符串

System.out.println("准备用公钥加密的字符串为:" +source);

String cryptograph= encrypt(source);//生成的密文

System.out.print("用公钥加密后的结果为:" +cryptograph);

System.out.println();

String target= decrypt(cryptograph);//解密密文

System.out.println("用私钥解密后的字符串为:" +target);

System.out.println();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值