欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

RSA加密算法java简单实现方法(必看)

程序员文章站 2024-03-12 20:18:20
简单完整的代码,通过这个代码你将对rsa加密算法在java中的实现方法有一个初步的了解,这个类,你可以直接使用,水平高的,就自己修改完善下代码。 package...

简单完整的代码,通过这个代码你将对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,n
		fileinputstream 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);
		// 获取明文m
		byte ptext[] = s.getbytes("utf-8");
		biginteger m = new biginteger(ptext);
		// 计算密文c
		biginteger 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());
		}
	}
}

以上这篇rsa加密算法java简单实现方法(必看)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。