下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上精选优质文档-倾情为你奉上专心-专注-专业专心-专注-专业精选优质文档-倾情为你奉上专心-专注-专业RSA加密算法的原理 (1)、RSA算法描述 RSA公钥密码体制的基本原理:根据数论,寻求两个大素数比较简单,而将他们的乘积分解开则极为困难。(2)、RSA算法密钥计算过程:1.用户秘密选取两个大素数 p 和 q,计算n=pq,n称为RSA算法的模数,公开。2.计算出n的欧拉函数F(n) = (p-1)(q-1),保密。3.从(1, F(n)中随机地选择一个与F(n)互素的数e作为加密密钥,公开。4.计算出满足下式的 d 作为解密密钥,保密。 ed=1 mod F(n)
2、(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也不保险
3、。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 erfaces.RSAPrivateKey; import java.se
4、erfaces.RSAPublicKey; import javax.crypto.Cipher; /RSATest类即为测试类public class RSATest /主函数 public static void main(String args) try RSATest encrypt = new RSATest(); String encryptText = encryptText;/输入的明文 KeyPair keyPair = encrypt.generateKey();/调用函数生成密钥对,函数见下 RSAPrivateKey privateKey = (RS
5、APrivateKey) 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码形式 Syste
6、m.out.println(toHexString(de); catch (Exception e) e.printStackTrace(); / generateKey密钥对生成函数的实现 public KeyPair generateKey() throws NoSuchAlgorithmException KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(RSA); /返回生成指定算法的 public/private 密钥对的 KeyPairGenerator 对象。 keyPairGen.initialize(1024
7、, new SecureRandom(); /使用给定的随机源(和默认的参数集合)初始化确定密钥大小的密钥对生成器。 KeyPair keyPair = keyPairGen.generateKeyPair();/生成一个密钥对 return keyPair; / encrypt加密函数 protected byte encrypt(RSAPublicKey publicKey, byte data) if (publicKey != null) try Cipher cipher = Cipher.getInstance(RSA);/返回实现指定转换的 Cipher 对象。 cipher.i
8、nit(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
9、) try Cipher cipher = Cipher.getInstance(RSA); 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);/构造一个不带任何字符的字符串生成器,其初始容量由 capacity 参数指定。 for (int i = 0; i 4); / append 方法始终将这些字符添加到生成器的末端;而 insert 方法则在指定的点添加字符。/调用HEXCHAR方法 sb.append(HEXCHARbi & 0 x0f); return sb.toString(); /构建一个HEXCHAR数组 private static char HEX
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- (四川人教)数学一年级上第四单元认识图形(一)-拼搭测试卷(附答案)
- 执业医师临床实践技能试卷及答案
- 泰州市护士招聘面试题及答案
- 太原市辅警招聘考试题库及答案
- 苏州市教师招聘笔试题及答案
- 跆拳道教练题库及答案
- 急救培训试卷及答案
- 关节腱鞘囊肿护理查房
- 关节复发性脱位护理查房
- 26年基因检测药师考核要点梳理
- 国企招聘在线测评试题
- 雨课堂学堂在线学堂云《金融法:金融科技与人工智能法(复旦)》单元测试考核答案
- 市场监管行政执法培训
- 第6课 爱护动植物 第二课时 课件(内置视频)-2025-2026学年道德与法治二年级下册统编版
- FDA食品安全计划PCQI范本
- 轨道交通系统运营与维护手册(标准版)
- 小学科学新教科版二年级下册2.5.设计钓鱼玩具 练习题(附参考答案和解析)2026春
- 2025年中国铁路武汉局集团有限公司招聘高校毕业生1291人(二)笔试参考题库附带答案详解
- 《缺血性脑卒中动物模型评价技术规范第1部分:啮齿类动物》编制说明
- 2025-2026学年西宁市城东区数学四年级上学期期中质量跟踪监视试题含解析
- 2026中国旅游集团总部及所属企业岗位招聘9人参考题库附答案
评论
0/150
提交评论