技术交流群: 233513714

//字符串进行加密算法的名称
public static final String ALGORITHM = "RSA";
//字符串进行加密填充的名称
public static final String PADDING = "RSA/NONE/NoPadding";
//字符串持有安全提供者的名称
public static final String PROVIDER = "BC";
//私钥文件路径(RSAUtil是RSA工具类的类名)
public static final String PRIVATE_KEY_FILE = RSAUtil.class.getClassLoader().getResource("").getPath() + "key" + "private_response_key_1.key";
//公钥文件路径
public static final String PUBLIC_KEY_FILE = RSAUtil.class.getClassLoader().getResource("").getPath() + "key" + "public_request_key_1.key"; /**
* 测试加密解密
*/
public void rsaTest(String str) {
log.info("[要加密解密的参数:{}]", str);
try {
String cipherText = encrypt(str);
String plainText = decrypt(cipherText);
log.info("[加密后的参数为:{}]", cipherText);
log.info("[解密后的参数为:{}]", plainText);
} catch (Exception e) {
log.info("[RSA加密解密出现异常:{}]", e);
}
} /**
* 将字符串进行RSA加密
*
* @param text
* @return
*/
public static String encrypt(String text) {
String cipherTextBase64 = "";
try {
ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(PUBLIC_KEY_FILE));
PublicKey publicKey = (PublicKey) inputStream.readObject();
Security.addProvider(new BouncyCastleProvider());
Cipher cipher = Cipher.getInstance(PADDING, PROVIDER);
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] cipherText = cipher.doFinal(text.getBytes());
Base64 base64 = new Base64();
cipherTextBase64 = base64.encodeToString(cipherText);
} catch (Exception e) {
log.info("[字符串进行RSA加密出现异常:{}]", e);
}
return cipherTextBase64;
}
/**
* 将字符串进行RSA解密
*
* @param str
* @return
*/
public static String decrypt(String str) {
byte[] dectyptedText = null;
try {
ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(PRIVATE_KEY_FILE));
PrivateKey privateKey = (PrivateKey) inputStream.readObject();
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
Cipher cipher = Cipher.getInstance(PADDING, PROVIDER);
cipher.init(Cipher.DECRYPT_MODE, privateKey);
Base64 base64 = new Base64();
byte[] text = base64.decode(str);
dectyptedText = cipher.doFinal(text);
} catch (Exception e) {
log.info("[字符串进行RSA解密出现异常:{}]", e);
}
return new String(dectyptedText);
}
/**
* 判断秘钥文件是否存在
*
* @return
*/
public static boolean areKeysPresent() {
File privateKey = new File(PRIVATE_KEY_FILE);
File publicKey = new File(PUBLIC_KEY_FILE);
if (privateKey.exists() && publicKey.exists()) {
return true;
}
return false;
} /**
* 生成公钥文件和私钥文件
*/
public static void generateKey() {
try {
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
final KeyPairGenerator keyGen = KeyPairGenerator.getInstance(ALGORITHM, PROVIDER);
keyGen.initialize(1024);
final KeyPair key = keyGen.generateKeyPair();
File privateKeyFile = new File(PRIVATE_KEY_FILE);
File publicKeyFile = new File(PUBLIC_KEY_FILE);
if (privateKeyFile.getParentFile() != null) {
privateKeyFile.getParentFile().mkdirs();
}
privateKeyFile.createNewFile();
if (publicKeyFile.getParentFile() != null) {
publicKeyFile.getParentFile().mkdirs();
}
publicKeyFile.createNewFile();
ObjectOutputStream publicKeyOS = new ObjectOutputStream(new FileOutputStream(publicKeyFile));
publicKeyOS.writeObject(key.getPublic());
publicKeyOS.close();
ObjectOutputStream privateKeyOS = new ObjectOutputStream(new FileOutputStream(privateKeyFile));
privateKeyOS.writeObject(key.getPrivate());
privateKeyOS.close();
} catch (Exception e) {
log.info("[生成公钥文件和私钥文件出现异常{}]", e);
}
}

JAVA中使用RSA通过秘钥文件对字符串进行加密解密的更多相关文章

  1. expect配合shell 实现自动分发秘钥文件

    expect使用场景 有时候需要批量地执行一些操作,或者执行自动化的操作的时候,有些指令需要交互式地进行这就会有很多麻烦,linux下有一个程序交expect,它可以模拟键盘输入文本,省去人工干预交互 ...

  2. 生成秘钥文件 sn.exe(Strong Name Tool)

    Visual Studio 内置 Strong Name Tool, 我们直接运行"VS开发人员命令提示"就可以生成秘钥文件. 秘钥文件包含公钥和私钥. 来看这个例子: 在文件夹下 ...

  3. SFTP协议生成公共秘钥文件

    [步骤] 1 ssh方式登录服务器 2 执行命令生成秘钥对 ssh-keygen -t rsa 然后给秘钥文件命名 3.查看当前目录的.ssh目录是否有authorized_keys文件 如果有则把新 ...

  4. sshd 指定端口,指定秘钥文件

     scp -i ~/test -P22219 SRC/ root@10.2.227.76:/data/ #sshd的端口指定的是22219,  -i 指定秘钥文件   指定秘钥文件需要注意的是,需要提 ...

  5. 使用CloudFlare 的 PKI 工具集 cfssl 来生成 Certificate Authority (CA) 证书和秘钥文件

    要安装kubernetes最新版集群,https://github.com/opsnull/follow-me-install-kubernetes-cluster 这个文档必须要研习一下了. 以下实 ...

  6. java中如何创建带路径的文件

    请教各位大侠了,java中如何创建带路径的文件,说明下 这个路径不存在 ------回答--------- ------其他回答(2分)--------- Java code File f = new ...

  7. java中File的delete()方法删除文件失败的原因

    java中File的delete()方法删除文件失败的原因 学习了:http://hujinfan.iteye.com/blog/1266387 的确是忘记关闭了: 引用原文膜拜一下: 一般来说 ja ...

  8. Java中使用RSA算法加密

    Java中使用RSA算法加密 概述 RSA加密算法是一种非对称加密算法 RSA加密的方式 使用公钥加密的数据,利用私钥进行解密 使用私钥加密的数据,利用公钥进行解密 RSA是一对密钥.分别是公钥和私钥 ...

  9. Java中Pattern类的quote方法将任何字符串(包括正则表达式)都转换成字符串常量,不具有任何匹配功能

    Java中Pattern类的quote方法将任何字符串(包括正则表达式)都转换成字符串常量,不具有任何匹配功能. 下面是个例子: import org.junit.Test; import java. ...

随机推荐

  1. ASP.NET MVC 使用Remote特性实现远程属性验证

    RemoteAttribute是asp.net mvc 的一个验证特性,它位于System.Web.Mvc命名空间 下面通过例子来说明 很多系统中都有会员这个功能,会员在前台注册时,用户名不能与现有的 ...

  2. python下载指定的版本包

    首先我们很多时候在执行pip的时候是不行的  有时候很难成功,这个时候我们就要想其他的版本了 一.是不是这个包需要指定版本, 比如python2的和mysql链接的是,而python3则是mysqlc ...

  3. zabbix 监控iptables

    参看的文章链接忘了...... yum -y install iptstate 1.脚本位置和内容 [root@web1 scripts]# pwd /etc/zabbix/scripts [root ...

  4. zhuangxiu

    红宝石家居广场国际家居馆 党湾综合市场(青年文明路)

  5. dotnet core入门

    dotnet 命令 C:\Users\yshuangj\Desktop\dotnet>dotnet Usage: dotnet [options]Usage: dotnet [path-to-a ...

  6. Golang包管理工具glide简介

    Golang包管理工具glide简介 前言 Golang是一个十分有趣,简洁而有力的开发语言,用来开发并发/并行程序是一件很愉快的事情.在这里我感受到了其中一些好处: 没有少了许多代码格式风格的争论, ...

  7. Hive学习之路 (十三)Hive分析窗口函数(一) SUM,AVG,MIN,MAX

    数据准备 数据格式 cookie1,, cookie1,, cookie1,, cookie1,, cookie1,, cookie1,, cookie1,, 创建数据库及表 create datab ...

  8. 约束,索引,rownum&rownum

    --constraint --not null 非空约束 --unique 唯一键 --非空&唯一 --自定义检查约束 --创建约束时,为约束起名 --在添加完列后,还可以添加约束 --除了n ...

  9. Codeforces 1106 E. Lunar New Year and Red Envelopes 优先队列+dp

    题意大致是Bob新年拿红包,每个红包可以在s-t时间内取,但是取了之后得在d+1时间开始才能继续取红包. 同时他女儿能在m个时间点阻止他取红包,求女儿阻止后Bob取得的w总和最小值. Bob取红包的策 ...

  10. Python之Cubes框架使用

    本文主要内容包含Cubes框架的介绍和简单使用. 一. 介绍和安装 Cubes是一个轻量级的Python框架和一套工具,用于开发报告和分析应用程序,在线分析处理(OLAP),多维分析和聚合数据的浏览. ...