实验四 公钥加密算法实验(改)
公钥密码算法

公钥密码算法
公钥密码算法是一种非对称加密算法,它使用一对公钥和私钥来加密和解密信息。
公钥密码算法的基本原理是:用户A将
要发送的信息使用用户B的公钥进行加密,然后发送给用户B,用户B收到信息后,使用自己的私钥进行解密,从而获得
原始信息。
公钥密码算法的安全性主要取决于公钥和私钥的安全性,因此,在使用公钥密码算法之前,需要先生成公钥和私钥。
一般来说,生成公钥和私钥的过程可以分为以下几个步骤:
1. 选择一个大质数p和一个小质数q,并计算出n=pq;
2. 选择一个大于1小于n的整数e,使得e与(p-1)(q-1)互质;
3. 计算出d,使得ed=1 mod (p-1)(q-1);
4. 将公钥(n,e)和私钥(n,d)发布出去。
在使用公钥密码算法进行加密时,可以使用以下步骤:
1. 将要发送的信息m转换成一个整数M,使得0<M<n;
2. 计算出密文C,C=M^e mod n;
3. 将密文C发送给接收方。
在使用公钥密码算法进行解密时,可以使用以下步骤:
1. 接收方收到密文C后,计算出明文M,M=C^d mod n;
2. 将明文M转换成原始信息m。
公钥密码算法的安全性取决于公钥和私钥的安全性,因此,在使用公钥密码算法时,应该采取有效的措施来保护公钥和私钥,以防止被攻击者破解。
例如,可以采用数字签名技术来验证公钥和私钥的真实性,以及采用加密技术来保护公钥和私钥,以防止被攻击者窃取。
实验四 公钥密码【甄选文档】

实验四公钥密码深圳大学实验报告课程名称:计算机安全导论实验项目名称:公钥密码实验学院:计算机与软件学院专业:软件工程指导教师:陈飞报告人:学号:班级:实验时间:实验报告提交时间:教务部制公钥密码体制又称为非对称密码体制,加解密使用公私钥密钥对,私钥由密钥拥有者保管,公钥可以公开,基于公开渠道进行分发,解决了对称密钥体制中密钥管理、分发和数字签名等难题。
RSA算法RSA公钥算法由Rivest、Shamir、Adleman于1978年提出的,是目前公钥密码的国际标准。
算法的数学基础是Euler定理,是基于Deffie-Hellman的单项陷门函数的定义而给出的第一个公钥密码的实际实现,其安全性建立在大整数因子分解的困难性之上。
RSA算法的[明文空间M] = [密文空间C] = [Z n整数] ,其算法描述如下:(1)密钥生成随机选择两个大素数p和q,计算n=p•q,;选择一个随机整数e<,满足,计算整数;公开公钥(n,e),安全的销毁p、q 和,并保留(d,n)作为私钥。
(2)加密(3)解密使用中国剩余定理可以加速RSA密码算法的实现。
实验内容:1、实现RSA的加解密计算2、RSA算法实现,重点实现扩展的欧几里得算法,幂指数算法,及加解密算法实验步骤与结果:1.实现RSA的算法1.1 扩展欧几里得算法的实现1.2 快速幂算法的实现1.3 密钥生成算法1.4 RSA主算法2.运行截图实验结论:注:1、报告内的项目或内容设置,可根据实际情况加以调整和补充。
2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。
感谢您使用本店文档您的满意是我们的永恒的追求!(本句可删)------------------------------------------------------------------------------------------------------------。
信息安全技术实验四 公钥加密实验

信息安全技术实验四公钥加密实验一实验目标请大家使用MFC完成程序的调试和实验内容。
二实验内容1 RSA简介1)公钥加密算法:加密使用一个密钥(公钥),解密使用另一个密钥(私钥),这样的算法称为公钥加密算法。
2)RSA介绍RSA是目前使用最广泛的公钥加密算法,是Rivest, Shamir,Adleman (RSA) 三个人,1977年发明出来的。
是最典型的公钥密码体制算法基于单向陷门函数的原理。
以模幂运算为基本运算。
安全性基于大数因子分解的困难性(将一个充分大的正整数分解成两个素数之积几乎是不可能的)。
数学基础是著名的欧拉(Euler)数论。
2 RSA的实现1)RSA数学表达1.1)RSA初始化步骤a)对于每个用户都生成自己的公钥\私钥对:b)选择两个随机大素数(~100 digit,10进制), p, qc)计算模数N=p.qd)选择一个随机加密密钥匙e : e<N, gcd(e,ø(N))=1e)解下列同余方程,求解密密钥d:f) e.d=1 mod ø(N) and 0<=d<=Ng)私钥是{d,p,q},是自己保留的,秘密的h)公钥是K={e,N},是公开发布的,任何人都可以获得。
1.2) RSA加密过程a)要加密消息M,发送者要得到接收者的公钥Kr={er,Nr} (注释r=receiver)b)计算: C=M er mod Nr, where 0<=M<Nc)将密文C发送给接收者1.3)RSA解密过程a)为解密C,接收者使用私钥K-1r={d,p,q}b)计算得出: M=C d mod Nr1.4)其中,私钥d的计算可以使用下列公式对满足方程a x ≡ 1 mod r的X:x=aφ(r)-1 mod r2)RSA的算法程序:2.1) 在RSA加解密算法Dlg.h文件中定义了p,q,n,e,d等变量public:CBigInt Q;CBigInt P;CBigInt N;CBigInt E;CBigInt D;2.2) 主体代码,实现数据的RSA加密//RSA加密void CRSADlg::OnOK(){ if(ready==0){m_OUT=_T("请先输入或生成N、D、E");UpdateData(FALSE);return;}UpdateData(TRUE);if(m_IN.GetLength()>256){m_OUT=_T("N不得大于256位");UpdateData(FALSE);return;}for(int i=0;i<m_IN.GetLength();i++){if((m_IN[i]<'0')||((m_IN[i]>'9')&&(m_IN[i]<'A'))||((m_IN[i]>'F')&&(m_IN[i]<'a'))||(m_IN[i]>'f')){m_OUT=_T("待加密数据必须为0-9或A-F或a-f组成的整数");UpdateData(FALSE);return;}}P.Get(m_IN);if(P.Cmp(N)>=0){m_OUT=_T("待加密数据必须小于N");UpdateData(FALSE);return;}Q.Mov(P.RsaTrans(E,N));//RSA加密实现,调用P.RsaTrans(E,N) 把P加密成Q,P是明文,Q是密文Q.Put(m_OUT); //Q输出赋值给变量m_OUT, 这个是与界面中的加密/解密输出结果文本框对应的变量UpdateData(FALSE); //FALSE表示,把m_OUT的值输出到界面显示。
加密基本算法实验报告

一、实验目的1. 理解并掌握加密的基本原理和常用算法。
2. 学会使用编程语言实现简单的加密和解密过程。
3. 提高对网络安全和信息安全重要性的认识。
二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.83. 工具:PyCharm三、实验内容本次实验主要涉及以下加密算法:1. 仿射密码2. 单表代替密码3. 维吉尼亚密码4. RSA算法四、实验步骤及结果1. 仿射密码(1)原理简介:仿射密码是一种基于线性代数的加密方法,其加密公式为 \(c = (ap + b) \mod 26\),其中 \(a\) 和 \(b\) 是密钥,\(p\) 是明文字符对应的数字,\(c\) 是密文字符对应的数字。
(2)代码实现:```pythondef affine_encrypt(plain_text, a, b):cipher_text = ''for char in plain_text:if char.isalpha():p = ord(char.lower()) - ord('a') c = (a p + b) % 26cipher_text += chr(c + ord('a')) else:cipher_text += charreturn cipher_textdef affine_decrypt(cipher_text, a, b):cipher_text = cipher_text.lower()a_inv = pow(a, -1, 26)plain_text = ''for char in cipher_text:if char.isalpha():c = ord(char) - ord('a')p = (a_inv (c - b)) % 26plain_text += chr(p + ord('a')) else:plain_text += charreturn plain_text```(3)测试结果:明文:HELLO WORLD密文:RQWKHU WHDP解密:HELLO WORLD2. 单表代替密码(1)原理简介:单表代替密码是一种将明文字符映射到密文字符的加密方法,其中每个明文字符只对应一个密文字符。
实验4_公钥密码RSA加解密算法模拟程序

实验四:公钥密码RSA加解密算法模拟程序
一、实验目的
1、编写简单的RSA加解密程序。
2、理解公钥密码体系的相关知识,尤其是RSA算法的加密与解密计算过程。
二、实验内容
编写程序实现RSA加解密算法,并通过demo验证算法的正确性。
具体要求如下:
1)能够对指定字符串加密并对加密后的密文进行解密,通过对比解密后的字符串与源字符串,证明程序加密与解密的正确性。
2)输出与加解密相关的各项参数,例如公钥、私钥、通过乘积运算构成大整数的两个素数等。
三、实验步骤及实验结果
1、实验步骤如下:
1)利用参考代码在VS2008开发工具编中写一个控制台程序
2)经过编译、链接生成可执行程序,运行程序,结果显示为:(因为调用Random函数,所以每次运行的结果都会不一样)
3)此外生成界面如下,输入明文
过乘积运算构成大整数的两个素数
5)按下“加密”,得到加密的密文;按下“解密”,得到解密的明文
四、实验结果分析
通过编写模拟RSA的加密与解密的程序,成功加密明文,得到加密的密文,并且解密后得到相应明文。
五、实验心得体会
通过学习的相应的RSA的加密与解密的知识,学会了RSA的加密解密的具体步骤。
同时了解了相关加密解密的过程。
公钥密码算法

公钥密码算法学号:0900250114 姓名:李荣亮摘要:古往今来,通信中的安全保密问题一直受到广泛关注。
历史上,交战双方在通信安全、保密和密码破译方面的优势均被认为是取得战争胜利的关键因素之一。
今天,随着互联网的发展,人类进入信息化时代,现代通信涉及各个行业,信息安全已成为人人都关心的问题,敏感信息的安全传输越来越受到人们的关注,这就促使密码学揭去了神秘的面纱,为更广泛的领域和大众服务。
一、公钥密码学概述。
公开密钥密码算法的提出是整个密码学历史上最大的而且也许是最唯一真正的变革。
从最初一直到现代,几乎所有密码系统都建立在基本的替代和置换工具的基础上。
在用了数千年的本质上可以手算完成的算法之后,常规的密码学随着转轮加密/解密机的发展才出现了一个重大进步。
机电式变码旋转软件使得极其复杂的密码系统被研制出来。
有了计算机后,更加复杂的系统被设计出来。
但是不管是转轮机还是后来的DES(数据加密标准),虽然代表了重要的进展,却仍然依赖于替代和置换这样的基本工具。
公钥密码学则与以前的所有方法都截然不同。
一方面公开密钥算法基于数学函数而不是替代和置换,更重要的是,公开密钥密码学是非对称的,它用到两个不同的密钥,而对称的常规加密则只使用一个密钥。
使用两个密钥对于保密通信,密钥分配和鉴别等领域都有着深远的影响。
公钥密码算法中的密钥依性质划分,可分为公钥和私钥两种。
用户或系统产生一对密钥,将其中的一个公开,称为公钥;另一个自己保留,称为私钥。
任何获悉用户公钥的人都可用用户的公钥对信息进行加密与用户实现安全信息交互。
由于公钥与私钥之间存在的依存关系,只有用户本身才能解密该信息,任何未受授权用户甚至信息的发送者都无法将此信息解密。
在近代公钥密码系统的研究中, 其安全性都是基于难解的可计算问题的。
如:(1)大数分解问题;(2)计算有限域的离散对数问题;(3)平方剩余问题;(4)椭圆曲线的对数问题等。
基于这些问题, 于是就有了各种公钥密码体制。
实验四 公钥密码算法RSA

实验四公钥密码算法RSA1、目的使学生认识理解公钥密码算法的基本原理:认识它和对称算法的基本区别和数学基础知识,掌握RSA的算法过程。
2、环境PC 1 台、VC603、预备知识1.RSA算法过程1.产生钥对(key pair)1-1.找出3个数:p, q, r或u; p, q 是两个相异的质数,gcd[r ,(p-1)(q-1)]=1. 再找出其逆元 r-1≡u% (p-1)(q-1), 即使得 ru ≡1 % (p-1)(q-1)。
u 一定存在(可逆元条件定理)。
(反函数存在性)(32位域的算法演示).1-2.计算 n = pq。
销毁p, q 。
1-3.公开数偶(u, n)为公钥。
(r,u 是可以互换的)1-4.秘管数偶(r, n)为私钥。
2.编码(RSA加密)若资料为 Y, 将其看成是一个大整数, 对于ASCII字串可以看成是256进制的大整数。
假设 Y < n,如果 Y >= n 的话, 就将 Y 按n分组长度进行分组, 则每一分组均小于 n, 然后分段编码,计算 Y I’≡ Y i^u mod n3.解码(RSA解密)计算 Y I’’≡ Y I’^r % pq, 解码完毕。
4、方法和步骤(1)请根据算法的描述和你对算法过程的理解,选用一种编程语言C,C++,Java,Pascal来实现RSA算法,//以学号右4位为明文,//以姓名全拼字串中的最左字符的ASCII码值+128的值为起点寻找最近的素数为P。
//以姓名全拼字串中的最右字符的ASCII码值的值为起点寻找最近的素数为Q。
//u=17,如果u与欧拉值不互质则,比u值大的下一相邻19素数赋给u;依此类推;//计算r;来构造RSA算法;并加解密。
将验证过程写于报告上。
如图所示:示例1输入r:启动RSA(32bit)加密;以时钟为随机种子产生素数!输入l:实验结果验证,RSA(32bit)加密!输入s:实验结果验证,RSA(32bit)签名!输入h:获得命令帮助!输入e:退出程序!请输入指令:lPlease Input your Name String(小写): tanwenxuepchar=116;字符值tqchar=101;字符值e116+128=244;找到素数p=251从101起:找到素数q=101;1-10有无非平凡因子;公钥模:101*251=25351φ((p-1)(q-1))=25000;已知公钥指数u=17;17r≡1 modφ((p-1)(q-1))根据欧拉定理:如gcd(a,n)=1A^φ(n) ≡1 mod n;Gcd(17,25000)=1;可用欧拉定理;求素因子分解式:25000=55*23;φ(25000)=25000*(1/2)(4/5)=10000;17-1=r=179999 mod 25000=7353(可用计算器)Please Input 明文(<10000 的整数!,4位十进制数.): 12317*7353%25000=1plaintext=123ciphertext=7079RSA公钥:u=17 n(pq)=25351RSA私钥:r=7353 n(pq)=25351 decryptciphertext=123正确加解密!请输入指令:sPlease your Name String is (小写): tanwenxuepchar=116;字符值tqchar=101;字符值e找到素数p=251找到素数q=101Please Input 明文(<10000 的整数!,4位十进制数.): 12317*7353%25000=1plaintext=123ciphertext=7079手工:123^17 mod 25351=7079(可用计算器)7079^7353 mod 25351=123RSA公钥:u=17 n(pq)=25351 RSA私钥:r=7353 n(pq)=25351 decryptciphertext=123正确加解密!Please Input 签名消息(<10000 的整数!,4位十进制数.): 123 17*7353%25000=1Message=123SignMessage=10244手工:123^7353 mod 25351=10244(可用计算器)10244^17 mod 25351=123RSA公钥:u=17 n(pq)=25351 RSA私钥:r=7353 n(pq)=25351 VerifyMessage=123签名有效!5、注意1算法要执行32位加密过程和解密过程并对正确性设计验证途径。
公钥密码

实验五公钥密码1、实验目的(1)实现自己的加密解密程序;(2)对密码学的相关知识,尤其是数据加密解密的过程有一个初步的了解。
2、实验要求编写程序,实现RSA加解密过程,要求:(1)程序工作在Windows环境下(2)能够使用RSA加密算法加密指定字符串并对加密后的密文进行解密,并与源字符串进行比对,证明解密无误(3)必须输出加密相关的各项参数,如公钥,私钥,通过乘积构成大整数的两个素数等3、实验条件微机一台、Visual Studio 6.0集成开发环境。
4、实验相关知识传统对称密码体系组成:明文:作为算法的输入,原始可理解的消息或者数据;加密算法:加密算法对明文进行各种代换和变换;密文:作为算法的输出,看起来完全随机而杂乱的数据,依赖明文和密钥。
对于给定的消息,不同的密钥将产生不同的密文,密文是随机的数据流,并且其意义是无法理解的;密钥:密钥也是加密算法的输入,密钥独立于明文,算法将根据所用的特定密钥而产生不同的输出。
算法所用的代换和变换也依靠密钥;解密算法:加密算法的逆。
输入密文和密钥可以用解密算法恢复出明文。
体系结构:传统非对称密码体系组成:(1)明文:作为算法的输入,原始可理解的消息或者数据;(2)加密算法:加密算法对明文进行各种代换和变换;(3)密文:作为算法的输出,看起来完全随机而杂乱的数据,依赖明文和密钥。
对于给 定的消息,不同的密钥将产生不同的密文,密文是随机的数据流,并且其意 义是无法理解的;(4)公钥和私钥:算法输入的一部分,公钥和私钥成对出现,一个用来加密,另一个用 来解密,加密算法执行的变化依赖与公钥和私钥 ;(5)解密算法:该算法用来接收密文和相应的密钥,并产生原始的明文。
体系结构:明文输入密文输出加密算法解密算法公钥私钥明文输入密文输出加密算法解密算法Key Key 收发方共享5 系统实施5.1程序的主要流程图5.2主要过程生成最大随机数:本模块主要由三个函数构成:第一个函数用来完成Rabin-Miller素数测试,这个函数利用了Femat定理:如果n是素数,an-1≡1 mod n,使用此定理可以大概率确定一个数可能为素数;重复调用Rabin-Miller检验函数确定一个数字是否为素数的函数;生成一个随机的大素数,程序首先生成一个确保最高位是一(确保足够大)的随机奇数,然后,检验该奇数是否是素数,重复该过程直到找到所需的素数为止。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四公钥加密算法实验
1、实验目的
掌握消息RSA密钥生成和加密算法的原理。
2、实验环境
硬件:ZXBee CC2530 节点板2 块、USB 接口的CC2530 仿真器,PC 机;
软件:Windows 7/Windows XP、IAR 集成开发环境、串口监控程序。
3、实验原理
RSA算法的关键是生成公钥私钥对。
本实验采用了一个简化的算法,通过一个给定的seed(实验组号)搜索两个不同的素数(100以内),并计算出公钥PubliceKey(e,n)和私钥PrivateKey(d,n)。
RSA加/解密公式为C=P e mod n和P=C d mod n,其中的幂指数运算速度慢,可采用下面的公式进行转换:
C=P e mod n=((...((P*P mod n)*P mod n)*P mod n)... ...)*P mod n
此外,RSA算法的明文和密文均为0到n-1之间的整数,而一般传送消息的长度单位为字节(8 bits),n 的大小与消息长度难以匹配。
因此,本实验采用如下的特殊处理方法:
(1)令选定公钥/私钥的n值小于65536,即n值小于16bits的二进制。
(2)将消息的每个字节(8bits)作为一个明文块。
(3)每个明文块进行RSA加密后,得到的密文块为16bits,用2个字节存放。
即密文的长度为明文的2倍。
(4)接收方收到的密文,按2个字节为一个密文块进行RSA解密,解密后的结果只保留低8bits。
4、实验步骤
1)本实验程序可在《指导书》4.4节程序上进行修改,可节约时间。
信道编号不用更改。
5
代码:
6)修改接收数据函数rfRecvData()。
接收节点不断接收各个发送节点发送的信息,先判断数据的第一个字节是不是本站点,如果是再进行解密。
通过串口显示结果。
5、实验报告要求
实验的结果注意观察下列情况,并对比(截图保存)。
1)发送节点发送密文,接收节点接收后显示密文,对应步骤6。
2)发送节点发送密文,接收节点接收后解密并显示明文,对应步骤8。
请回答以下问题:
1)为什么密文的长度与明文的长度不一致?
2)请写出本小组所用的公钥和私钥的值,包括e,d,n的值。
并针对字符'G',列写加密公式和解密公式,手工验算密文是否与步骤6的串口显示结果相同。
(字符'G'的ASCII码为71)3)密钥分配问题。
本实验例程里面,发送方和接收方均已知公钥和私钥。
然而在实际应用中,发送方和接收方针对公钥和私钥应当如何应用才能保证信息的机密性?(提示,发送方是不可能产生公钥或者私钥的,应该在通信前提前拥有接收方的公钥。
)
4)实际应用中为什么不将RSA算法直接用于消息加密?。