您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > Elgamal密码算法编程实验--7.4课件
7.4Elgamal密码算法编程实验实验目的:掌握Elgamal密码加解密原理,并利用VisualC++编程实现。实验内容:编程实现字符串”Hi,thisisElgamal!”的加密,并解密验证之。网络空间安全实践教程17.4Elgamal密码算法编程实验实验原理:系统参数:选取指定bit数的大素数p取g是乘法群的一个生成元密钥生成:随机选取整数,并计算,则y是公钥,x是私钥网络空间安全实践教程2}1,,1{*pZp)1,1[pxpgyxmod7.4Elgamal密码算法编程实验实验原理:加密:对于明文,随机选取整数,计算,得到密文解密:对于密文,计算,得到解密后的明文网络空间安全实践教程3*pZm)1,1[pkpymcpgckkmod,mod21),(21ccc**21),(ppZZcccpccmxmod)(112m7.4Elgamal密码算法编程实验实验要点说明:素数与生成元选取:对于一般的素数p,我们有以下生成元判定算法:令p-1的所有素因子是,若,则g是乘法群的生成元。这个判定算法需要对p-1做因数分解,当p是一个普通的大素数时,因数分解本身就是困难的问题,所以在实现ElGamal密码时一般将p取成2*q+1(q也是素数)的形式,这样形式的素数也被称为安全素数。网络空间安全实践教程4naaa,,,21nipgiap,,1,mod1/)1(}1,,1{*pZp7.4Elgamal密码算法编程实验实验要点说明:素数与生成元选取:取p是一个安全素数,即p=2*q+1,q也是素数,因为p-1的素因子是2和q。则根据以上判定算法,只要中的元素g满足则g就是乘法群的生成元。所以在生成Elgamal密码中的大素数p时,就限制其是安全素数(2*q+1)的形式,可参考如下代码:网络空间安全实践教程5pgpgqmod1,mod12}1,,1{*pZp7.4Elgamal密码算法编程实验BigintGenSafePrime(intbytes)//生成安全素数p=2q+1{Bigintone={1};Biginttwo={2};Bigintq=BigRandOdd(bytes);Bigintp=Add(Narrow(Mul(two,q)),one);//p=2*q+1intloop=20;while(!MillerRabin(q,loop)&&!MillerRabin(p,loop)){q=BigRandOdd(bytes);p=Add(Narrow(Mul(two,q)),one);}returnp;}网络空间安全实践教程67.4Elgamal密码算法编程实验实验准备:Windows操作系统VisualStudio2010以上开发环境网络空间安全实践教程77.4Elgamal密码算法编程实验实验步骤:利用VisualC++开发环境,构建类似右图的Elgamal密码加解密界面。编写随机生成密钥按钮事件:随机生成大素数p与生成元g,再随机生成私钥x与公钥y并显示。编写加密按钮事件:从明文框中读入字符序列,生成随机数k,利用公钥进行加密,在密文框中输出。编写解密按钮事件:从密文框中读入字符序列,根据私钥对其解密,在解密的明文框中输出。网络空间安全实践教程87.4Elgamal密码算法编程实验实验结果要求:给出关键编程思路。总结实验过程中遇到的问题和经验。网络空间安全实践教程97.4Elgamal密码算法编程实验实验视频:网络空间安全实践教程10
本文标题:Elgamal密码算法编程实验--7.4课件
链接地址:https://www.777doc.com/doc-7276552 .html