全栈工程师开发手册 (作者:栾鹏)
java教程全解
java使用RSA加密方式实现数据加密解密,需要首先产生私钥和公钥
测试代码
public static void main(String args[]) {try {RSADemo rsa=new RSADemo();rsa.generateKey();byte[] data=rsa.encrypt("luanpeng".getBytes());byte[] data1=rsa.decrypt(data);String str=new String(data1);System.out.println(str);} catch (Exception e) {System.out.println(e.toString());}}
RSA工具类的实现
package com.lp.app.safe;import java.security.*;import java.security.interfaces.*;import java.math.*;public class RSADemo {public RSADemo() {}PublicKey pbkey;PrivateKey prkey;public void generateKey() {try {KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");kpg.initialize(1024);KeyPair kp = kpg.genKeyPair();pbkey = kp.getPublic();prkey = kp.getPrivate();} catch (Exception e) {}}//加密,需要公钥public byte[] encrypt(byte[] ptext) throws Exception {// 获取公钥及参数e,nRSAPublicKey pbk = (RSAPublicKey)pbkey;BigInteger e = pbk.getPublicExponent();BigInteger n = pbk.getModulus();// 获取明文mBigInteger m = new BigInteger(ptext);// 计算密文cBigInteger c = m.modPow(e, n);return c.toByteArray();}//使用私钥进行解密public byte[] decrypt(byte[] ctext) throws Exception {// 读取密文BigInteger c = new BigInteger(ctext);// 读取私钥RSAPrivateKey prk = (RSAPrivateKey)prkey;BigInteger d = prk.getPrivateExponent();// 获取私钥参数及解密BigInteger n = prk.getModulus();BigInteger m = c.modPow(d, n);// 显示解密结果byte[] mt = m.toByteArray();return mt;}}