RSA简单加密与解密
2016-11-13 16:30
323 查看
package entity;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStreamWriter;
import java.math.BigInteger;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
public class RSADemo{
/*
* 产生秘钥
*/
public static void generateKey(){
try {
//指定算法
KeyPairGenerator kpg=KeyPairGenerator.getInstance("RSA");
//确定密钥大小
kpg.initialize(1024);
//产生密钥对
KeyPair kp=kpg.genKeyPair();
//获取公钥
PublicKey publicKey=kp.getPublic();
//获取私钥
PrivateKey privateKey=kp.getPrivate();
//保存公钥
FileOutputStream f1=new FileOutputStream("publicKey.dat");
ObjectOutputStream o1=new ObjectOutputStream(f1);
o1.writeObject(publicKey);
o1.close();
f1.close();
//保存私钥
FileOutputStream f2=new FileOutputStream("privateKey.dat");
ObjectOutputStream o2=new ObjectOutputStream(f2);
o2.writeObject(privateKey);
o2.close();
f2.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/*
* 加密
*/
public static void encrypt(){
//明文
String s="Hello World!";
try {
//获取公钥及参数e,n
FileInputStream f=new FileInputStream("publicKey.dat");
ObjectInputStream oos=new ObjectInputStream(f);
RSAPublicKey publicKey=(RSAPublicKey) oos.readObject();
BigInteger e= publicKey.getPublicExponent();
BigInteger n= publicKey.getModulus();
System.out.println("参数e= " + e);
System.out.println("参数n= " + n);
//获取明文
byte[] content=s.getBytes("UTF-8");
BigInteger m=new BigInteger(content);
//计算密文
BigInteger c=m.modPow(e, n);
System.out.println("密文为:"+c);
//保存密文
String c1=c.toString();
BufferedWriter out=new BufferedWriter(new OutputStreamWriter(
new FileOutputStream("encrypt.dat")));
out.write(c1,0,c1.length());
out.close();//一定要记得关闭,否则会出现空指针异常
} catch (Exception e) {
e.printStackTrace();
}
}
public static void decrypt(){
try {
//读取密文
BufferedReader br=new BufferedReader(new InputStreamReader(
new FileInputStream("encrypt.dat")));
String content=br.readLine();
BigInteger c=new BigInteger(content);
//读取私钥
FileInputStream f1=new FileInputStream("privateKey.dat");
ObjectInputStream o1=new ObjectInputStream(f1);
RSAPrivateKey privateKey=(RSAPrivateKey) o1.readObject();
// 获取私钥参数及解密
BigInteger d=privateKey.getPrivateExponent();
BigInteger n=privateKey.getModulus();
System.out.println("参数d="+d);
System.out.println("参数n="+n);
BigInteger m=c.modPow(d, n);
//显示解密结果
byte[] mt=m.toByteArray();
for(int i=0;i<mt.length;i++){
System.out.print((char)mt[i]);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
try {
generateKey();
encrypt();
decrypt();
} catch (Exception e) {
System.out.println(e.toString());
}
}
}
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStreamWriter;
import java.math.BigInteger;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
public class RSADemo{
/*
* 产生秘钥
*/
public static void generateKey(){
try {
//指定算法
KeyPairGenerator kpg=KeyPairGenerator.getInstance("RSA");
//确定密钥大小
kpg.initialize(1024);
//产生密钥对
KeyPair kp=kpg.genKeyPair();
//获取公钥
PublicKey publicKey=kp.getPublic();
//获取私钥
PrivateKey privateKey=kp.getPrivate();
//保存公钥
FileOutputStream f1=new FileOutputStream("publicKey.dat");
ObjectOutputStream o1=new ObjectOutputStream(f1);
o1.writeObject(publicKey);
o1.close();
f1.close();
//保存私钥
FileOutputStream f2=new FileOutputStream("privateKey.dat");
ObjectOutputStream o2=new ObjectOutputStream(f2);
o2.writeObject(privateKey);
o2.close();
f2.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/*
* 加密
*/
public static void encrypt(){
//明文
String s="Hello World!";
try {
//获取公钥及参数e,n
FileInputStream f=new FileInputStream("publicKey.dat");
ObjectInputStream oos=new ObjectInputStream(f);
RSAPublicKey publicKey=(RSAPublicKey) oos.readObject();
BigInteger e= publicKey.getPublicExponent();
BigInteger n= publicKey.getModulus();
System.out.println("参数e= " + e);
System.out.println("参数n= " + n);
//获取明文
byte[] content=s.getBytes("UTF-8");
BigInteger m=new BigInteger(content);
//计算密文
BigInteger c=m.modPow(e, n);
System.out.println("密文为:"+c);
//保存密文
String c1=c.toString();
BufferedWriter out=new BufferedWriter(new OutputStreamWriter(
new FileOutputStream("encrypt.dat")));
out.write(c1,0,c1.length());
out.close();//一定要记得关闭,否则会出现空指针异常
} catch (Exception e) {
e.printStackTrace();
}
}
public static void decrypt(){
try {
//读取密文
BufferedReader br=new BufferedReader(new InputStreamReader(
new FileInputStream("encrypt.dat")));
String content=br.readLine();
BigInteger c=new BigInteger(content);
//读取私钥
FileInputStream f1=new FileInputStream("privateKey.dat");
ObjectInputStream o1=new ObjectInputStream(f1);
RSAPrivateKey privateKey=(RSAPrivateKey) o1.readObject();
// 获取私钥参数及解密
BigInteger d=privateKey.getPrivateExponent();
BigInteger n=privateKey.getModulus();
System.out.println("参数d="+d);
System.out.println("参数n="+n);
BigInteger m=c.modPow(d, n);
//显示解密结果
byte[] mt=m.toByteArray();
for(int i=0;i<mt.length;i++){
System.out.print((char)mt[i]);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
try {
generateKey();
encrypt();
decrypt();
} catch (Exception e) {
System.out.println(e.toString());
}
}
}
相关文章推荐
- Linux C/C++ Openssl RSA Encrypt/Decrypt(加密/解密) 简单示例教程
- openssl rsa 加密,解密,签名,验签简单例子
- java 实现RSA 加密解密工具类及其内部简单流程
- RSA简单加密解密
- java中RSA加密解密算法简单实现
- RSA简单加密解密
- java实现RSA的简单加密解密
- java实现RSA+AES的简单加密解密
- PHP web开发中RSA加密解密简单示例
- C#中文RSA加密解密的简单方式
- RSA加密解密及RSA签名和验证
- RSA加密解密及RSA签名和验证
- .net下RSA加密解密的封装
- 使用X.509数字证书加密解密实务(三)-- 使用RSA证书结合对称加密技术加密长数据
- Java - 简单加密-解密方法包装, 含encode(),decode(),md5()
- 跨语言平台的RSA加密、解密、签名、验证算法的实现
- 在asp中通过vbs类实现rsa加密与解密
- 对输入的字符串进行RSA加密和解密处理
- 简单的使用FormsAuthenticationTicket来加密解密
- RSA加密解密及RSA签名和验证(转)