- 1、本文档共33页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第13章 公钥密码实现程序-1
网络编程技术 概述 公钥密码体制在网络与信息安全应用中具有重要的地位。通过本章学习,读者可以了解非对称密码体系——RSA算法的实现细节,并可以对DES、椭圆曲线等其他密码学算法有简单的了解。 提纲 编程训练目的 编程训练要求 相关知识介绍 程序设计分析 扩展与提高 编程训练目的 实现自己的加密解密程序 对密码学的相关知识,尤其是数据加密解密的过程有一个初步的了解 提纲 编程训练目的 编程训练要求 相关知识介绍 程序设计分析 扩展与提高 编程训练要求 程序界面示例 提纲 编程训练目的 编程训练要求 相关知识介绍 程序设计分析 扩展与提高 密码学发展历史 传统对称密码体系组成 体系结构 传统非对称密码体系组成 体系结构 提纲 编程训练目的 编程训练要求 相关知识介绍 程序设计分析 扩展与提高 模乘运算和模幂运算模块 模乘运算即计算两个数的乘积然后取模,其中为了避免大数相乘造成的溢出,根据求模运算的性质,优化了算法,其中“(a%n)*(b%n)%n”等价于“(a*b) %n”。 模幂运算就是计算一个数的n次幂,然后进行取模运算,同样是出于避免大数相乘造成溢出的情况,这里编程使用了一些数学技巧,基于快速模幂算法进行优化。 1、模乘运算和模幂运算模块 1、模乘运算和模幂运算模块 生成最大随机数 本模块主要由三个函数构成: 第一个函数用来完成Rabin-Miller素数测试,这个函数利用了Femat定理:如果n是素数,an-1≡ 1 mod n,使用此定理可以大概率确定一个数可能为素数; 重复调用Rabin-Miller检验函数确定一个数字是否为素数的函数; 生成一个随机的大素数,程序首先生成一个确保最高位是1(确保足够大)的随机奇数,然后,检验该奇数是否是素数,重复该过程直到找到所需的素数为止; 2、生成最大随机数 2、生成最大随机数 2、生成最大随机数 2、生成最大随机数 求最大公约数 运用了欧几里德辗转相除法 求最大公约数 运用普通除法求最大公约数 3、求最大公约数 计算私钥 计算私钥主要就是计算d的值,根据第三节介绍的基础知识,d必须满足(d*e - 1) mod ф(n) = 0,所以,求d(已知e和ф(n))的过程等价于寻找二元方程 ed - ф(n)i = 1的最大整数解(i为另一未知量) 4、计算私钥 加密解密过程 首先程序初始化相关变量,定义字符串“abcdefghijklmnopqrstuvwxyz”作为加密的源字符串,其中RSA_PARAM是一个预先定义的结构体,用来存储和RSA加密算法相关的参数。 通过调用函数RsaGetParam()初始化与RSA加密相关的各项参数,并在终端输出; 循环调用模幂运算函数针对每个字节计算C = Me mod n,并输出加密后的运算结果; 同样循环调用模幂运算函数计算M=Cd mod n;并输出解密后的字符串; 5、加密解密过程 5、加密解密过程 提纲 编程训练目的 编程训练要求 相关知识介绍 程序设计分析 扩展与提高 扩展与提高 扩展与提高 扩展与提高 RSA安全性: 穷举攻击 数学攻击 计时攻击 *网络编程技术 计算机硬件基础教学中心 Copyright ? by NUPT All rights reserved. Technology of Network Programming 第13章 公钥密码实现程序 编写程序,实现RSA加解密过程,要求: 程序工作在Windows环境下 能够使用RSA加密算法加密指定字符串并对加密后的密文进行解密,并与源字符串进行比对,证明解密无误 必须输出加密相关的各项参数,如公钥,私钥,通过乘积构成大整数的两个素数等 最早的密码学应用 近代密码学发展 密码学在战争中的应用 明文:作为算法的输入,原始可理解的消息或者数据; 加密算法:加密算法对明文进行各种代换和变换; 密文:作为算法的输出,看起来完全随机而杂乱的数据,依赖明文和密钥。对于给定的消息,不同的密钥将产生不同的密文,密文是随机的数据流,并且其意义是无法理解的; 密钥:密钥也是加密算法的输入,密钥独立于明文,算法将根据所用的特定密钥而产生不同的输出。算法所用的代换和变换也依靠密钥; 解密算法:加密算法的逆。输入密文和密钥可以用解密算法恢复出明文; 明文:作为算法的输入,原始可理解的消息或者数据; 加密算法:加密算法对明文进行各种代换和变换; 密文:作为算法的输出,看起来完全随机而杂乱的数据,依赖明文和密钥。对于给定的消息,不同的密钥将产生不同的密文,密文是随机的数据流,并且其意义是无法理解的; 公钥和私钥:算法输入的一部分,公钥和私钥成对出现,一个用来加密,另一个用来解密,加密算
文档评论(0)