添加链接
注册
登录
link之家
链接快照平台
输入网页链接,自动生成快照
标签化管理网页链接
相关文章推荐
英勇无比的领带
·
兰州市城关区人民政府 今日要闻 ...
·
1 月前
·
痴情的硬盘
·
嫩芽(词语)_百度百科
·
6 月前
·
会开车的滑板
·
最新Pivi ...
·
1 年前
·
深情的小刀
·
CIT“抗疫助学”频道
·
1 年前
·
贪玩的排球
·
【研发日志】渌水琴魔成长报告 - 哔哩哔哩
·
1 年前
·
link之家
›
java实现RSA加密解密算法 _java rsa加密算法_renhui15688的博客
rsa
非对称加密算法
公钥加密
公钥算法
https://blog.csdn.net/renhui15688/article/details/2267608
成熟的柠檬
1 年前
实现一对密钥对整个项目所有加密解密文件都适用的方法
,
采用先生成一对密钥
.
保存到
xml
文件中
,
以后
获得私匙和公钥只需要从
xml
文件中取得就可以了
.
/**
*
把成生的一对密钥保存到
RSAKey.xml
文件中
*/
public void saveRSAKey() {
try {
SecureRandom sr = new SecureRandom();
KeyPairGenerator kg = KeyPairGenerator.getInstance("RSA",
new org.bouncycastle.jce.provider.BouncyCastleProvider());
//
注意密钥大小最好为
1024,
否则解密会有乱码情况
.
kg.initialize(1024, sr);
FileOutputStream fos = new FileOutputStream("C:/RSAKey.xml");
ObjectOutputStream oos = new ObjectOutputStream(fos);
//
生成密钥
oos.writeObject(kg.generateKeyPair());
oos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
注意
:
需要从
http://www.bouncycastle.org下载
包
.
bcprov-jdk14-137.jar
获取密钥方法如下
:
/**
*
获得
RSA
加密的密钥。
* @return KeyPair
返回对称密钥
*/
public static KeyPair getKeyPair() {
//
产生新密钥对
KeyPair kp;
try {
String fileName = "conf/RASKey.xml";
InputStream is = FileUtils.class.getClassLoader()
.getResourceAsStream(fileName);
ObjectInputStream oos = new ObjectInputStream(is);
kp = (KeyPair) oos.readObject();
oos.close();
} catch (Exception e) {
throw new EprasRuntimeException("
读取加密文件出错
.", e);
}
return kp;
}
文件采用
RSA
算法加密文件
/**
*
文件
file
进行加密并保存目标文件
destFile
中
* @param
srcFileName
*
要加密的文件
如
c:/test/srcFile.txt
* @param
destFileName
*
加密后存放的文件名
如
c:/
加密后文件
.txt
*/
public static void encryptFile(String srcFileName,
String destFileName) throws Exception {
OutputStream outputWriter = null;
InputStream inputReader = null;
try {
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding",
new org.bouncycastle.jce.provider.BouncyCastleProvider());
byte[] buf = new byte[100];
int bufl;
cipher.init(Cipher.ENCRYPT_MODE, getKeyPair().getPublic());
outputWriter = new FileOutputStream(destFileName);
inputReader = new FileInputStream(srcFileName);
while ((bufl = inputReader.read(buf)) != -1) {
byte[] encText = null;
byte[] newArr = null;
if (buf.length == bufl) {
newArr = buf;
} else {
newArr = new byte[bufl];
for (int i = 0; i < bufl; i++) {
newArr
= (byte) buf
;
}
}
encText = cipher.doFinal(newArr);
outputWriter.write(encText);
}
outputWriter.flush();
} catch (Exception e) {
throw e;
} finally {
try {
if (outputWriter != null) {
outputWriter.close();
}
if (inputReader != null) {
inputReader.close();
}
} catch (Exception e) {
}
}
}
文件采用
RSA
算法解密文件
/**
*
文件
file
进行加密并保存目标文件
destFile
中
* @param
srcFileName
*
已加密的文件
如
c:/
加密后文件
.txt
* @param
destFileName
*
解密后存放的文件名
如
c:/ test/
解密后文件
.txt
*/
public static void decryptFile(String srcFileName,
String destFileName) throws Exception {
OutputStream outputWriter = null;
InputStream inputReader = null;
try {
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding",
new org.bouncycastle.jce.provider.BouncyCastleProvider());
byte[] buf = new byte[128];
int bufl;
cipher.init(Cipher.DECRYPT_MODE, getKeyPair().getPrivate());
outputWriter = new FileOutputStream(destFileName);
inputReader = new FileInputStream(srcFileName);
while ((bufl = inputReader.read(buf)) != -1) {
byte[] encText = null;
byte[] newArr = null;
if (buf.length == bufl) {
newArr = buf;
} else {
newArr = new byte[bufl];
for (int i = 0; i < bufl; i++) {
newArr
= (byte) buf
;
}
}
encText = cipher.doFinal(newArr);
outputWriter.write(encText);
}
outputWriter.flush();
} catch (Exception e) {
throw e;
} finally {
try {
if (outputWriter != null) {
outputWriter.close();
}
if (inputReader != null) {
inputReader.close();
}
} catch (Exception e) {
}
}
}
如果对于大文件加密采用
RSA
算法执行速度要非常非常慢
;
RSA
是一种应用比较广泛的非对称
加密
算法
,是由MIT工作的三人姓名首字母命名的。
RSA
算法
主要依靠分解大素数的复杂性来
实现
其安全性,由于大素数之积难被分解,因此该密码就难被破解。(素数:质数的别称,一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则成为合数,规定1既不是质数也不是合数。)从1977年提出到现在已经四十余年,经历了各种攻击的考验,普遍认为是目前最优秀的公钥方案之一。
RSA
算法
是一种非对称加
解密
算法
。服务方生成一对
RSA
密钥,即公钥 + 私钥,将公钥提供给调用方,调用方使用公钥对数据进行
加密
后,服务方根据私钥进行
解密
。 import
java
x.crypto.Cipher; import
java
.security.*; import
java
.security.interfaces.
RSA
PrivateKey; import
java
.security.interfaces.
RSA
PublicKey; * @author guochao * @date 2021/11/10 public class
RSA
Test { publi 本文实例讲述了
java
实现
的
RSA
加密
算法
。分享给大家供大家参考,具体如下:一、什么是非对称
加密
1、
加密
的密钥与
加密
的密钥不相同,这样的
加密
算法
称之为非对称
加密
2、密钥分为:公钥,私钥公钥:可以对外给任何人的
加密
和
解密
的密码,是公开的私钥:通过私钥可以生成公钥,但从公钥被认为无法生成公钥(被推导出的概率小到不考虑)3、当将要
加密
的内容用公钥
加密
的时候,只能用私钥来
解密
当将要
加密
的内容用私钥
加密
的时... 5.最后简单谈谈
RSA
的安全性 在
RSA
密码应用中,公钥KU是被公开的,即e和n的数值可以被第三方窃听者得到。破解
RSA
密码的问题就是从已知的e和n的数值(n等于pq),想法求出d的数值,这样就可以得到私钥来破
解密
文。从上文中的公式:d ≡e-1 (mod((p-1)(q-1)))或de≡1 (mod((p-1)(q-1))) 我们可以看出。密码破解的实质问题是:从Pq的数值,去求出(p-1)和(q-1)。换句话说,只要求出p和q的
RSA
是一种非对称
加密
算法
,一般采用公钥
加密
,私钥
解密
的形式生成密钥对首先创建KeyPairGenerator类的对象,用于生成公钥和私钥对// 生成公钥和私钥对,基于
RSA
算法
生成对象KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("
RSA
");然后初始化密钥对的长度,最低长度512位,并且长度不能低于明文的长度// 初始化密...
RSA
算法
是目前非常常见的
加密
算法
,他对应的加
解密
、签名验签的场景非常常见。因其特性对大字符串加
解密
效率较低,曾经想对较长字符串加
解密
,而因其
解密
过程为分段
解密
而捣鼓过;这里贴一下代码。
推荐文章
英勇无比的领带
·
兰州市城关区人民政府 今日要闻 在管理中下功夫于细微处见真章 城关区积极开展烟头垃圾精拣行动
1 月前
痴情的硬盘
·
嫩芽(词语)_百度百科
6 月前
会开车的滑板
·
最新Pivi Pro2信息娱乐系统,新款路虎发现运动版上市38.98万起!
1 年前
深情的小刀
·
CIT“抗疫助学”频道
1 年前
贪玩的排球
·
【研发日志】渌水琴魔成长报告 - 哔哩哔哩
1 年前