import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.security.InvalidKeyException;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import sun.misc.BASE64Encoder;
import sun.misc.BASE64Decoder;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import sun.misc.BASE64Decoder;
public class RSAEncrypt {
private static final String DEFAULT_PUBLIC_KEY=
"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq+q1jq/oltkzaRzhS1j/trFjB" + "\r" +
"X6j5+is3pq0Ork2BR17cLqnYgZg8IO0VcvssN2RrkYqG1SscVRkCUCXJ32jXaaC4" + "\r" +
"FrsxWdODsXzl9kj0RLQetHI5nDK7VCnLa07K055DNI9YDc3KcSUi/995KbXYlvsJ" + "\r" +
"RcxkyOvyTfShuYvbAQIDAQAB" + "\r";
/*
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq+q1jq/oltkzaRzhS1j/trFjB
X6j5+is3pq0Ork2BR17cLqnYgZg8IO0VcvssN2RrkYqG1SscVRkCUCXJ32jXaaC4
FrsxWdODsXzl9kj0RLQetHI5nDK7VCnLa07K055DNI9YDc3KcSUi/995KbXYlvsJ
RcxkyOvyTfShuYvbAQIDAQAB
*/
/*
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKr6rWOr+iW2TNpH
OFLWP+2sWMFfqPn6KzemrQ6uTYFHXtwuqdiBmDwg7RVy+yw3ZGuRiobVKxxVGQJQ
JcnfaNdpoLgWuzFZ04OxfOX2SPREtB60cjmcMrtUKctrTsrTnkM0j1gNzcpxJSL/
33kptdiW+wlFzGTI6/JN9KG5i9sBAgMBAAECgYEAjzp3TWufnT/dmWzX7ey0mPEr
WLI950p+MZxalFXHb2jOOjyM42WMlbIvaSxs5Flysfm1xcWE27MdxCZHwZh5RbwP
jvqAWERKX/uy9pvu9WLOiNJ59gtgXJX68d8lO8Gcdu77SPJPZFiR8QKWSOZs1TDm
deS/RVJuaTnxGbfusAECQQDU4ZWcjJ8m99mzK2fVy3mlpKjwO4QkoxERDwIB6trl
LIkC0VDFx4Fv2zjk34OLbcZYj/cOSpltDcSUuNnTiWghAkEAzZxfJJcySWCiL+tO
RVIbUc3E4klbyBIxT59USRIKf1UrHd4StSgIeA36WVajW/catCuo35znpWoSJ3Tg
YkSW4QJAIoxpx3pa6ewXfKhytZPMLkHG2RYPoBKG1onk/YKr+716juaBgVebfhfJ
5/sOUjaCliTnJ36b38L4QFqvn1ERgQJAEzzyWgYbmmoEQt+Nb0cDb2AFb/bVM58g
JgcOZ9fcS5W4dw70SSb5w+Hq7rkAh/ZS9VCweFvCAOQv1qlE5WztgQJBAIRUjxJj
H1Qqp9SpWftp5GrDm4RsgeiFPAuiu9AaiBzNoXjsRTi7tbokgjXT3rWtVAwS/Mbj
tgMti+PYo/E8mak=
*/
private static final String DEFAULT_PRIVATE_KEY=
"MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKr6rWOr+iW2TNpH" + "\r" +
"OFLWP+2sWMFfqPn6KzemrQ6uTYFHXtwuqdiBmDwg7RVy+yw3ZGuRiobVKxxVGQJQ" + "\r" +
"JcnfaNdpoLgWuzFZ04OxfOX2SPREtB60cjmcMrtUKctrTsrTnkM0j1gNzcpxJSL/" + "\r" +
"33kptdiW+wlFzGTI6/JN9KG5i9sBAgMBAAECgYEAjzp3TWufnT/dmWzX7ey0mPEr" + "\r" +
"WLI950p+MZxalFXHb2jOOjyM42WMlbIvaSxs5Flysfm1xcWE27MdxCZHwZh5RbwP" + "\r" +
"jvqAWERKX/uy9pvu9WLOiNJ59gtgXJX68d8lO8Gcdu77SPJPZFiR8QKWSOZs1TDm" + "\r" +
"deS/RVJuaTnxGbfusAECQQDU4ZWcjJ8m99mzK2fVy3mlpKjwO4QkoxERDwIB6trl" + "\r" +
"LIkC0VDFx4Fv2zjk34OLbcZYj/cOSpltDcSUuNnTiWghAkEAzZxfJJcySWCiL+tO" + "\r" +
"RVIbUc3E4klbyBIxT59USRIKf1UrHd4StSgIeA36WVajW/catCuo35znpWoSJ3Tg" + "\r" +
"YkSW4QJAIoxpx3pa6ewXfKhytZPMLkHG2RYPoBKG1onk/YKr+716juaBgVebfhfJ" + "\r" +
"5/sOUjaCliTnJ36b38L4QFqvn1ERgQJAEzzyWgYbmmoEQt+Nb0cDb2AFb/bVM58g" + "\r" +
"JgcOZ9fcS5W4dw70SSb5w+Hq7rkAh/ZS9VCweFvCAOQv1qlE5WztgQJBAIRUjxJj" + "\r" +
"H1Qqp9SpWftp5GrDm4RsgeiFPAuiu9AaiBzNoXjsRTi7tbokgjXT3rWtVAwS/Mbj" + "\r" +
"tgMti+PYo/E8mak=" + "\r";
/**
* 私钥
*/
private RSAPrivateKey privateKey;
/**
* 公钥
*/
private RSAPublicKey publicKey;
/**
* 字节数据转字符串专用集合
*/
private static final char[] HEX_CHAR= {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
/**
* 获取私钥
* @return 当前的私钥对象
*/
public RSAPrivateKey getPrivateKey() {
return privateKey;
}
/**
* 获取公钥
* @return 当前的公钥对象
*/
public RSAPublicKey getPublicKey() {
return publicKey;
}
/**
* 随机生成密钥对
*/
public void genKeyPair(){
KeyPairGenerator keyPairGen= null;
try {
keyPairGen= KeyPairGenerator.getInstance("RSA");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
keyPairGen.initialize(1024, new SecureRandom());
KeyPair keyPair= keyPairGen.generateKeyPair();
this.privateKey= (RSAPrivateKey) keyPair.getPrivate();
this.publicKey= (RSAPublicKey) keyPair.getPublic();
}
/**
* 从文件中输入流中加载公钥
* @param in 公钥输入流
* @throws Exception 加载公钥时产生的异常
*/
public void loadPublicKey(InputStream in) throws Exception{
try {
BufferedReader br= new BufferedReader(new InputStreamReader(in));
String readLine= null;
StringBuilder sb= new StringBuilder();
while((readLine= br.readLine())!=null){
if(readLine.charAt(0)=='-'){
continue;
}else{
sb.append(readLine);
sb.append('\r');
}
}
loadPublicKey(sb.toString());
} catch (IOException e) {
throw new Exception("公钥数据流读取错误");
} catch (NullPointerException e) {
throw new Exception("公钥输入流为空");
}
}
/**
* 从字符串中加载公钥
* @param publicKeyStr 公钥数据字符串
* @throws Exception 加载公钥时产生的异常
*/
public void loadPublicKey(String publicKeyStr) throws Exception{
try {
BASE64Decoder base64Decoder= new BASE64Decoder();
byte[] buffer= base64Decoder.decodeBuffer(publicKeyStr);
KeyFactory keyFactory= KeyFactory.getInstance("RSA");
X509EncodedKeySpec keySpec= new X509EncodedKeySpec(buffer);
this.publicKey= (RSAPublicKey) keyFactory.generatePublic(keySpec);
} catch (NoSuchAlgorithmException e) {
throw new Exception("无此算法");
} catch (InvalidKeySpecException e) {
throw new Exception("公钥非法");
} catch (IOException e) {
throw new Exception("公钥数据内容读取错误");
} catch (NullPointerException e) {
throw new Exception("公钥数据为空");
}
}
/**
* 从文件中加载私钥
* @param keyFileName 私钥文件名
* @return 是否成功
* @throws Exception
*/
public void loadPrivateKey(InputStream in) throws Exception{
try {
BufferedReader br= new BufferedReader(new InputStreamReader(in));
String readLine= null;
StringBuilder sb= new StringBuilder();
while((readLine= br.readLine())!=null){
if(readLine.charAt(0)=='-'){
continue;
}else{
sb.append(readLine);
sb.append('\r');
}
}
loadPrivateKey(sb.toString());
} catch (IOException e) {
throw new Exception("私钥数据读取错误");
} catch (NullPointerException e) {
throw new Exception("私钥输入流为空");
}
}
public void loadPrivateKey(String privateKeyStr) throws Exception{
try {
BASE64Decoder base64Decoder= new BASE64Decoder();
byte[] buffer= base64Decoder.decodeBuffer(privateKeyStr);
PKCS8EncodedKeySpec keySpec= new PKCS8EncodedKeySpec(buffer);
KeyFactory keyFactory= KeyFactory.getInstance("RSA");
this.privateKey= (RSAPrivateKey) keyFactory.generatePrivate(keySpec);
} catch (NoSuchAlgorithmException e) {
throw new Exception("无此算法");
} catch (InvalidKeySpecException e) {
throw new Exception("私钥非法");
} catch (IOException e) {
throw new Exception("私钥数据内容读取错误");
} catch (NullPointerException e) {
throw new Exception("私钥数据为空");
}
}
/**
* 加密过程
*
112817rsatest(JAVA加密).zip_JVD1_hillwfw_mean6l4_rsa
版权申诉
89 浏览量
2022-09-22
14:17:11
上传
评论
收藏 1.44MB ZIP 举报
weixin_42651887
- 粉丝: 80
- 资源: 1万+
最新资源
- 面向计算机视觉的基础库,支持Linux、Windows及MacOS平台 提供了众多功能,包括基于PyTorch的通用训练框架等
- 基于LQR实现的车辆轨迹跟踪matlab源码+项目说明+超详细注释(高分项目)
- 视2.css
- Android图片处理工具类,包括: 图片查看、照片墙、bitmap转存、圆角、剪切、图片加载缓存、图片压缩等
- 甘豆影评React Native版
- 百度地图,显示闸站分布,以及切换闸站位置,上传闸站图片信息的cordova插件,包含百度地图和百度定位库文件
- 基于合泰单片机的智能夹球小车(esp8266代码+k210代码+合泰单片机代码)
- 一个天气查询的安卓APP
- 基于CC2530+DHT11温湿度传感器实现物联网多传感器火灾报警系统
- 人工智能入口计划-通往人工智能的大门 项目正在研究阶段,编码暂时停滞调整
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0