RSA加密算法java编程实现
更新时间:2024-04-16 07:20:01 阅读量: 综合文库 文档下载
一、 RSA加密算法的原理
(1)、RSA算法描述
RSA公钥密码体制的基本原理:根据数论,寻求两个大
素数比较简单,而将他们的乘积分解开则极为困难。 (2)、RSA算法密钥计算过程:
1.用户秘密选取两个大素数 p 和 q,计算n=pq,n称为RSA算法的模数,公开。
2.计算出n的欧拉函数?(n) = (p-1)×(q-1),保密。 3.从(1, ?(n))中随机地选择一个与?(n)互素的数e作为加密密钥,公开。
4.计算出满足下式的 d 作为解密密钥,保密。
ed=1 mod ?(n) (3)、RSA算法密钥:
加密密钥PK = |e, n| 公开 解密密钥SK = |d, n| 保密 (4)、RSA算法加密解密过程:
RSA算法属于分组密码,明文在加密前要进行分组,分组的值 m 要满足:0 < m < n 加密算法:C = E(m) ≡ me mod n
解密算法:m = D(c) ≡ cd mod n
(5)、RSA算法的几点说明:
1.对于RSA算法,相同的明文映射出相同的密文。
2.RSA算法的密钥长度:是指模数n的长度,即n的二进制位数,而不是e或d的长度。
3.RSA的保密性基于大数进行因式分解很花时间,因此,进行RSA加密时,应选足够长的密钥。512bit已被证明不安全,1024bit也不保险。
4.RSA最快情况也比DES慢100倍,仅适合少量数据的加密。公钥e取较小值的方案不安全。
二.RSA公钥加密算法的编程实现
以下程序是java编写的实现RSA加密及解密的算法
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 javax.crypto.Cipher;
//RSATest类即为测试类
public class RSATest { //主函数
public static void main(String[] args) { try {
RSATest encrypt = new RSATest();
String encryptText = \;//输入的明文
KeyPair keyPair = encrypt.generateKey();//调用函数生成密钥对,函数见下 RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); byte[] e = encrypt.encrypt(publicKey, encryptText.getBytes()); //调用自己编写的encrypt函数实现加密,
byte[] de = encrypt.decrypt(privateKey, e); //调用自己编写的decrypt函数实现解密,
System.out.println(toHexString(e)); //输出结果,采用ASSIC码形式
System.out.println(toHexString(de)); } catch (Exception e) { e.printStackTrace(); } }
// generateKey密钥对生成函数的实现
public KeyPair generateKey() throws NoSuchAlgorithmException { KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(\); //返回生成指定算法的 public/private 密钥对的 KeyPairGenerator 对象。 keyPairGen.initialize(1024, new SecureRandom());
//使用给定的随机源(和默认的参数集合)初始化确定密钥大小的密钥对生成器。 KeyPair keyPair = keyPairGen.generateKeyPair();//生成一个密钥对 return keyPair; }
// encrypt加密函数
protected byte[] encrypt(RSAPublicKey publicKey, byte[] data) {
if (publicKey != null) { try {
Cipher cipher = Cipher.getInstance(\); //返回实现指定转换的
Cipher 对象。
cipher.init(Cipher.ENCRYPT_MODE, publicKey); //用密钥初始化此 Cipher,第一个参数表示加密 return cipher.doFinal(data);
//按单部分操作加密或解密数据,或者结束一个多部分操作。数据将被加密或解密(具
体取决于此 Cipher 的初始化方式)。
} catch (Exception e) { e.printStackTrace(); } }
return null; }
// decrypt解密函数
protected byte[] decrypt(RSAPrivateKey privateKey, byte[] raw) { if (privateKey != null) { try {
Cipher cipher = Cipher.getInstance(\);
cipher.init(Cipher.DECRYPT_MODE, privateKey); //第一个参数表示解密 return cipher.doFinal(raw); } catch (Exception e) { e.printStackTrace(); }
}
return null; }
// toHexString将字节数组变为ASSIC码表示的字符串 public static String toHexString(byte[] b) { StringBuilder sb = new StringBuilder(b.length * 2); //构造一个不带任何字符的字符串生成器,其初始容量由 for (int i = 0; i < b.length; i++) { sb.append(HEXCHAR[(b[i] & 0xf0) >>> 4]); // append 方法始终将这些字符添加到生成器的末端;而
capacity 参数指定。
insert 方法则在指定的点添
加字符。
//调用HEXCHAR方法
sb.append(HEXCHAR[b[i] & 0x0f]); }
return sb.toString(); }
//构建一个HEXCHAR数组
private static char[] HEXCHAR = { '0', '1', '2', '3', '4', '5', '6', '7','8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; }
小结:
RSA公开密钥的加密算法实现方法如上所述,我们先是调用API生成
了RSA的密钥对,然后调用API实现了加密与解密,最终通过编译的函数实现了字符数组的字符串输出,且输出的是字符串的ASSIC.
正在阅读:
RSA加密算法java编程实现04-16
地方政府控股上市公司的终极控制权特征09-27
C++语言程序设计复习题09-20
《形体礼仪》教案 - 图文10-15
宝山第一小学开展社会矛盾12-17
2016年11月CMA 中文版P2题库112-04
2014-2019年中国女装行业调研与投资战略研究报告 - 图文10-02
工控机实验报告 - 图文04-03
对于学校如何提高素质教育建议10-11
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 算法
- 加密
- 编程
- 实现
- java
- RSA
- 建设项目工程规划许可指标申报表 - 图文
- 尽职调查清单详细版本
- CPE行业替代品及互补产品分析(上海环盟) - 图文
- 触摸屏小数点之后的数值由PLC单个发送给仪表的方法
- 四年级数学:应用题204道
- 宁波牛奶集团牛奶配送线路优化 - 图文
- 大准提咒
- 苏教版小学数学六年级上册《长方体与正方体》专项练习试题(10套
- 韩芳《老人与海鸥》课堂实录
- 板蓝根注射液的制备
- 无锡产业结构分析
- 医疗保险手册及报销相关问题解答
- 午夜随想
- 浅谈用PLC改造旧式机床电气控制系统
- 对外经济贸易大学远程教育学院2010—2011学年第一学期《计算机应
- a234邮政营业员高级试卷正文
- 组织中的圈子分析 - 组织内部关系结构比较研究
- 2013年淄博市教师继续教育考试题库整理版(按首字母排序)
- 初二语文阅读理解与写作训练
- 初级建构筑物消防员理论知识考试卷A含答案