今天终于理解了Java使用RSA算法的原理和步骤
基本方法就是生成KeyPair
然后通过encoder 再base64 变成byte数据
然后在传输后进行反向操作
在实验的 过程中也发现了其中密钥生成和加密的过程比较费时,如果考虑到大量的用户同时操作可能会导致系统性能不足以支持,另外,较长的处理信息时间要求有更好的并发性能,可以采用类似线程池的方法来进行并发操作,如果不改变当前算法,可以通过将加密这一过程分布到多台计算机上进行运算,可以有效的避免这一瓶颈,按照这样的伸缩性要求,加密和解密模块可以进行进一步分离,预留接口以备分布式操作。
性能数据:
slevenc@linux-7vvc:/my/projects/IMYOURS/rsaTest/bin> java RsaTest
初始化
18
生成密钥
653
加密文本
466
message sth阿斯顿会计法片尾urqpeqwpeiurqwpeurwqpeirupwqeiurpwioeurpoqwieurpowqeirupoqweirupqoweirupoqweirup
解密文本
24
slevenc@linux-7vvc:/my/projects/IMYOURS/rsaTest/bin> java RsaTest
初始化
17
生成密钥
506
加密文本
582
message sth阿斯顿会计法片尾urqpeqwpeiurqwpeurwqpeirupwqeiurpwioeurpoqwieurpowqeirupoqweirupqoweirupoqweirup
解密文本
36
相关代码:
public static void main(String args[]) {
String text = "message sth阿斯顿会计法片尾urqpeqwpeiurqwpeurwqpeirupwqeiurpwioeurpoqwieurpowqeirupoqweirupqoweirupoqweirup";
Date d = new Date();
try {
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(1024);
System.out.println("初始化");
System.out.println((new Date()).getTime() - d.getTime());
d = new Date();
KeyPair kp = kpg.generateKeyPair();
System.out.println("生成密钥");
System.out.println((new Date()).getTime() - d.getTime());
d = new Date();
// System.out.println("public:\n" + getKey(kp.getPublic()));
// System.out.println("private:\n" + getKey(kp.getPrivate()));
//
// System.out.println("屏幕打印");
// System.out.println((new Date()).getTime() - d.getTime());
// d = new Date();
byte[] eb = EncoderByPublicKey(text,getKey(kp.getPublic()));
System.out.println("加密文本");
System.out.println((new Date()).getTime() - d.getTime());
d = new Date();
System.out.println(DecoderByPrivateKey(eb,getKey(kp.getPrivate())));
System.out.println("解密文本");
System.out.println((new Date()).getTime() - d.getTime());
d = new Date();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static byte[] EncoderByPublicKey(String text,String key)throws Exception{
byte[] keyBytes = (new BASE64Decoder()).decodeBuffer(key);
X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
Key publicKey = keyFactory.generatePublic(x509KeySpec);
Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
return cipher.doFinal(text.getBytes("utf-8"));
}
private static String DecoderByPrivateKey(byte[] data,String key)throws Exception{
byte[] keyBytes = (new BASE64Decoder()).decodeBuffer(key);
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
Key privateKey = keyFactory.generatePrivate(keySpec);
Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
cipher.init(Cipher.DECRYPT_MODE, privateKey);
return new String(cipher.doFinal(data),"utf-8");
}
private static String getKey(Key key) {
return (new BASE64Encoder()).encode(key.getEncoded());
}
分享到:
相关推荐
易语言 rsa加密 易语言 rsa加密易语言 rsa加密
在本项目中,"rsa.zip_QT RSA加密算法_Qt rsa加密_qt rsa加密步骤_rsa_rsa算法 qt",开发者已经实现了RSA加密算法,并结合Qt创建了一个具有图形界面的应用,使得加密过程更为直观易用。 首先,我们来深入理解RSA...
在本压缩包中,提供了RSA加密解密的工具——PRO_TDES_RSA.exe,这是一个执行程序,能够帮助用户对文件进行加密和解密操作。结合"RSATool工具简易操作指南 .doc",用户可以详细了解如何使用这个工具来保护他们的敏感...
RSA加密算法是公钥密码学领域的一个里程碑,它由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因此得名RSA。这种算法基于大整数因子分解的困难性,使得它在信息安全领域被广泛用于数据加密和数字签名。在...
RSA加密是一种非对称加密算法,它基于两个不同的密钥:公钥和私钥。在Java和JavaScript中实现RSA加密,对于处理较长的数据至关重要,因为这两种语言的标准库默认的RSA加密只能处理相对较小的块。这里我们将深入探讨...
"RSA加密算法实验报告.pdf" 本实验报告主要介绍了RSA加密算法的实现和原理,包括密钥对的产生、加密和解密过程、数字签名等。下面是该实验报告的详细知识点总结: 一、RSA加密算法的原理 RSA加密算法是基于大数...
本文将深入探讨RSA加密和解密的基础知识以及如何在Unity中实现这一功能。 首先,RSA加密的核心原理是基于大整数因子分解的困难性。它生成一对密钥:公钥和私钥。公钥可以公开,用于加密;而私钥必须保密,用于解密...
**C# RSA加密解密详解** 在信息安全领域,加密技术是一种至关重要的手段,用于保护数据的隐私和安全性。RSA(Rivest-Shamir-Adleman)算法是一种非对称加密算法,广泛应用于网络通信、数据存储等领域。C#作为.NET...
只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。但在分布式计算和量子计算机理论日趋成熟的今天,RSA加密安全性受到了挑战。 RSA算法基于一个十分简单的数论事实:将两个大质数相乘十分容易,但是想...
C++实现RSA加密 在这里,我们将详细介绍C++实现RSA加密的知识点。 标题分析 该标题表明了这个项目的主要内容是使用C++语言实现RSA加密算法。RSA加密是一种常用的非对称加密算法,广泛应用于数据加密和身份验证等...
POSTMAN RSA加密是一种在Postman测试工具中使用RSA加密技术的方法,主要涉及到JavaScript库Forge.js。Forge.js是一个强大的开源加密库,提供了多种加密算法,包括RSA(Rivest-Shamir-Adleman),这对于安全地传输...
* RSA加密解密:私钥解密,公钥加密。 * RSA数字签名-俗称加签验签:私钥加签,公钥验签。 * RSA加密解密:私钥解密,公钥加密。 * RSA数字签名-俗称加签验签:私钥加签,公钥验签。 * RSA加密解密:私钥...
本资源提供了RSA加密解密的源码,适用于学习和理解RSA算法的工作原理及其实现。 首先,RSA算法的核心原理基于大数的因式分解困难性。它由三位科学家Rivest、Shamir和Adleman于1977年提出,因此得名RSA。该算法包括...
RSA加密算法是一种非对称加密技术,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,是现代密码学的基石之一。在PowerBuilder(PB)开发环境中,使用RSA算法可以实现数据的安全传输和存储。PB12.5是Power...
RSA加密是一种非对称加密算法,它在网络安全和数据保护中扮演着重要角色。在前后端交互中,RSA加密常用于保障数据传输的安全性,防止数据在传输过程中被窃取或篡改。以下是对RSA加密及其在前后端交互中应用的详细...
RSA加密解密C#实现调用实例 public string RSAEncrypt(string xmlPublicKey, string m_strEncryptString) { try { byte[] PlainTextBArray; byte[] CypherTextBArray; string Result; System.Security....
用PowerBuilder实现RSA加密算法
RSA加密算法是公钥密码学领域的一个里程碑,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因此得名RSA。它是一种非对称加密算法,即加密和解密使用不同的密钥,极大地提高了安全性。在C语言中实现RSA...
10. **源代码与实践**:提供的RAR文件可能包含RSA加密和解密的源代码及可执行文件,这对于学习密码学理论和实践非常有价值。通过阅读和运行这些代码,可以深入理解RSA的工作机制。 总之,RSA加密算法是现代密码学的...
RSA加密是一种非对称加密算法,它在网络安全和数据保护领域广泛应用。该算法基于大整数因子分解的困难性,即找到两个大素数的乘积的因数是非常困难的。这种特性使得RSA成为一种安全的数据加密手段,常用于网络传输中...