RSA公匙和密匙生成方法 package org.markerking; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; public abstract class RSAKey ... { /** *//** * 生成2048位的RSA公匙和私匙 */ public static void generator( String privateKeyFileName) throws Exception ...{ KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); kpg.initialize(2048); KeyPair kp = kpg.generateKeyPair(); PublicKey puk = kp.getPublic(); PrivateKey prk = kp.getPrivate(); FileOutputStream fos1 = new FileOutputStream("publicRSAKey.dat"); FileOutputStream fos2 = new FileOutputStream(privateKeyFileName); ObjectOutputStream oos1 = new ObjectOutputStream(fos1); ObjectOutputStream oos2 = new ObjectOutputStream(fos2); oos1.writeObject(puk); oos2.writeObject(prk); oos1.close(); oos2.close(); fos1.close(); fos2.close(); System.out.println("公匙生成成功!公匙文件为publicRSAKey.dat"); System.out.println("私匙生成成功!私匙文件为" + privateKeyFileName); } /** *//** * 获取已经生成的公匙 * * @return RSAPublicKey */ protected static RSAPublicKey getPublicKey(String publicKeyFileName) throws Exception ...{ FileInputStream fis = new FileInputStream(publicKeyFileName); ObjectInputStream ois = new ObjectInputStream(fis); RSAPublicKey rsapuk = (RSAPublicKey) ois.readObject(); return rsapuk; } /** *//** * 获取已经生成的私匙 * * @return RSAPrivateKey */ protected static RSAPrivateKey getPrivateKey(String privateKeyFileName) throws Exception ...{ FileInputStream fis = new FileInputStream(privateKeyFileName); ObjectInputStream ois = new ObjectInputStream(fis); RSAPrivateKey psaprk = (RSAPrivateKey) ois.readObject(); return psaprk; }} 调用方法 package org.markerking; import java.math.BigInteger; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; /** */ /** * RSA非对称式加密与解密 * * @author MarkerKing * @version v1.0 * @time 2007-2-23 21:19 */ public class RSAUtil ... { /** *//** * 加密方法 * * @param String * 需要加密的数据 * @return String 加密后的数据 */ public String S2RSA(String str) throws Exception ...{ // 获得公匙 RSAPublicKey rsapuk = RSAKey.getPublicKey("publicRSAKey.dat"); // 获得公匙参数e,n BigInteger e = rsapuk.getPublicExponent(); BigInteger n = rsapuk.getModulus(); // 转换明文m byte[] btext = str.getBytes("GB2312"); BigInteger m = new BigInteger(btext); // 计算密文 BigInteger c = m.modPow(e, n); // 返回 return c.toString(); } /** *//** * 解密方法 * * @param String * 私匙文件 * @param String * 加密后的字符串 * @return String 解密后的字符串 */ public String RSA2S(String fileName, String rsaStr) throws Exception ...{ // 获取私匙 RSAPrivateKey rsaprk = RSAKey.getPrivateKey(fileName); // 获取私匙参数d,n BigInteger d = rsaprk.getPrivateExponent(); BigInteger n = rsaprk.getModulus(); // 获取密文 BigInteger c = new BigInteger(rsaStr); // 解密计算 BigInteger m = c.modPow(d, n); // 转换成String byte[] ctext = m.toByteArray(); return new String(ctext); }}