JAVA中RSA的类
别处摘的,先保存下来
package com.google.algorithm;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
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.SecureRandom;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
public class RSA
{
public static void main(String[] args) throws NoSuchAlgorithmException, IOException, ClassNotFoundException
{
KeyPair pair = generateKeyPair();
PrivateKey privateKey = pair.getPrivate();
PublicKey publicKey = pair.getPublic();
// Save Pirvate Key
FileOutputStream f1 = new FileOutputStream("private.ppk");
ObjectOutputStream b1 = new ObjectOutputStream(f1);
b1.writeObject(privateKey);
// Save Public Key
FileOutputStream f2 = new FileOutputStream("public.ppk");
ObjectOutputStream b2 = new ObjectOutputStream(f2);
b2.writeObject(publicKey);
encrypt();
decrypt();
}
public static void encrypt() throws IOException, ClassNotFoundException
{
String msg = "Hello World!";
FileInputStream f = new FileInputStream("public.ppk");
ObjectInputStream b = new ObjectInputStream(f);
RSAPublicKey pbk = (RSAPublicKey) b.readObject();
// RSA算法是使用整数进行加密的,在RSA公钥中包含有两个整数信息:e和n。对于明文数字m,计算密文的公式是m的e次方再与n求模。
BigInteger e = pbk.getPublicExponent();
BigInteger n = pbk.getModulus();
// 获取明文的大整数
byte ptext[] = msg.getBytes("utf-8");
BigInteger m = new BigInteger(ptext);
// 加密明文
BigInteger c = m.modPow(e, n);
// 打印密文c
System.out.println("c= " + c);
// 将密文以字符串形式保存在文件中
String cs = c.toString();
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("encrypt.dat"), "utf-8"));
out.write(cs, 0, cs.length());
out.close();
}
public static void decrypt() throws IOException, ClassNotFoundException
{
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("encrypt.dat"), "utf-8"));
String ctext = in.readLine();
BigInteger c = new BigInteger(ctext);
// 获取私钥
FileInputStream f = new FileInputStream("private.ppk");
ObjectInputStream b = new ObjectInputStream(f);
RSAPrivateKey prk = (RSAPrivateKey) b.readObject();
// 获取私钥的参数d,n
BigInteger d = prk.getPrivateExponent();
BigInteger n = prk.getModulus();
// 解密明文
BigInteger m = c.modPow(d, n);
// 计算明文对应的字符串并输出。
byte[] mt = m.toByteArray();
System.out.println("PlainText is " + new String(mt, "utf-8"));
}
public static KeyPair generateKeyPair() throws NoSuchAlgorithmException
{
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
final int KEY_SIZE = 1024;
keyPairGen.initialize(KEY_SIZE, new SecureRandom());
KeyPair keyPair = keyPairGen.genKeyPair();
return keyPair;
}
}
分享到:
相关推荐
JAVA中RSA加密解密工具类
Java实现,公钥私钥通过计算生产,没有调用API,可以更直观的理解RSA公钥私钥的生成 资源中包含源码、jar包。不管是不想造轮子还是想要学习的同学都适用 也可以根据需要改造代码
JAVA 实现RSA的加解密算法,通过BASE64编码,密钥长度1024
java go RSA互相加解密 go rsa加密后可以用 java解密, java rsa加密后 可以用解密, 要把 txt文件中的秘钥和私钥 都复制粘贴到java 文件和go 文件 ,公钥和私钥统一才可以
用于.net 与Java间RSA加密的转换 包括RsaHelper类及相关的类
Java OpenSSL生成的RSA公私钥进行数据加解密详细介绍 项目: JAVA生成的RSA的密文,通过C++来解密。 RSA这里就不多介绍了大家自己去看。 JAVA也是通过包来实现加密和解密的,那么我的C++是通过OPENSSL的库来实现的...
RSA在C#和java中的应用,通过公钥加密私钥解密,私钥加密公钥解密
由于Java的RSA加解密一般都是用RSA/ECB/PKCS1PADDING,导致Python一般的RSA加密库的加解密结果与Java的不兼容,Python下目前能与之兼容的RSA的库目前发现的只有一个,就是m2crypto。 这个库目前的问题是在windows...
使用Java语言来实现 rsa加密算法,没有调用Java中的类,是直接按照rsa加密原理一步一步实现
JAVA RSA 加密算法 RSA.java RSA公钥加解密,RSA私钥加解密,MD5withRSA 签名 MD5withRSA签名较验
C#和Java关于RSA非对称加密互通类,包括提供RSA加密、解密方法,Java到c#的RSA私钥格式转换,Java到c#的RSA公钥格式转换等,使用PKCS1填充算法
集合百度大多案例,整理汇总
C#与java平台RSA加密解密签名验签互通案例,解决RSA在C#与java加密算法不同导致验签不过情况
Java 生成RSA密钥进行数据加密解密 支持超长字符分区 ,同时支持本地读取生成的密钥文件和远程服务器上存放的秘钥文件
用java实现RSA加密
使用RSA非对称加密完成Java后端RSA加密和分段加解密,最近研究了RSA非对称加密,关于什么是RSA,网上各种文章一搜一大把,由于RSA的特性,一个1024位的密钥只能加密117位字节数据,当数据量超过117位字节的时候,程序...
JAVA+RSA的DEMO工程,适合初学者学习RSA加密解密 文档参看 http://blog.csdn.net/u013400939/article/details/44490441
java RSA非对称密钥加密,自己建个java项目就好了,也可以当成工具类
基于Java的RSA文件加密软件的设计与实现项目是一款基于Java语言开发的文件加密软件,主要使用Java加密标准库中的RSA算法实现文件加密和解密。该系统主要适用于需要保护文件安全性的个人或企业用户,提供可靠的文件...
Java实现文件的RSA和DES加密 说明代码