RSA加密算法java简单实现

来源:互联网 发布:网络主播用什么摄像头 编辑:程序博客网 时间:2024/05/24 04:22

有问题请扫描下图

简单完整的代码,通过这个代码你将对RSA加密算法在Java中的实现方法有一个初步的了解,这个类,你可以直接使用,水平高的,就自己修改完善下代码。

package security;import java.security.*;import java.security.spec.*;import java.security.interfaces.*;import javax.crypto.spec.*;import javax.crypto.interfaces.*;import java.io.*;import java.math.*;public class RSADemo {public RSADemo() {}public static void generateKey() {try {KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");kpg.initialize(1024);KeyPair kp = kpg.genKeyPair();PublicKey pbkey = kp.getPublic();PrivateKey prkey = kp.getPrivate();// 保存公钥FileOutputStream f1 = new FileOutputStream("pubkey.dat");ObjectOutputStream b1 = new ObjectOutputStream(f1);b1.writeObject(pbkey);// 保存私钥FileOutputStream f2 = new FileOutputStream("privatekey.dat");ObjectOutputStream b2 = new ObjectOutputStream(f2);b2.writeObject(prkey);} catch (Exception e) {}}public static void encrypt() throws Exception {String s = "Hello World!";// 获取公钥及参数e,nFileInputStream f = new FileInputStream("pubkey.dat");ObjectInputStream b = new ObjectInputStream(f);RSAPublicKey pbk = (RSAPublicKey) b.readObject();BigInteger e = pbk.getPublicExponent();BigInteger n = pbk.getModulus();System.out.println("e= " + e);System.out.println("n= " + n);// 获取明文mbyte ptext[] = s.getBytes("UTF-8");BigInteger m = new BigInteger(ptext);// 计算密文cBigInteger c = m.modPow(e, n);System.out.println("c= " + c);// 保存密文String cs = c.toString();BufferedWriter out =new BufferedWriter(new OutputStreamWriter(new FileOutputStream("encrypt.dat")));out.write(cs, 0, cs.length());out.close();}public static void decrypt() throws Exception {// 读取密文BufferedReader in =new BufferedReader(new InputStreamReader(new FileInputStream("encrypt.dat")));String ctext = in.readLine();BigInteger c = new BigInteger(ctext);// 读取私钥FileInputStream f = new FileInputStream("privatekey.dat");ObjectInputStream b = new ObjectInputStream(f);RSAPrivateKey prk = (RSAPrivateKey) b.readObject();BigInteger d = prk.getPrivateExponent();// 获取私钥参数及解密BigInteger n = prk.getModulus();System.out.println("d= " + d);System.out.println("n= " + n);BigInteger m = c.modPow(d, n);// 显示解密结果System.out.println("m= " + m);byte[] mt = m.toByteArray();System.out.println("PlainText is ");for (int i = 0; i < mt.length; i++) {System.out.print((char) mt[i]);}}public static void main(String args[]) {try {generateKey();encrypt();decrypt();} catch (Exception e) {System.out.println(e.toString());}}}


4 0
原创粉丝点击