欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    计算机网络安全实验报告--非对称密码算法RSA(共10页).doc

    • 资源ID:14221187       资源大小:54.50KB        全文页数:10页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    计算机网络安全实验报告--非对称密码算法RSA(共10页).doc

    精选优质文档-倾情为你奉上专心-专注-专业实验二 非对称密码算法RSA一、实验目的通过实际编程了解非对称密码算法RSA的加密和解密过程,加深对非对称密码算法的认识。二、实验环境运行Windows或Linux操作系统的PC机,具有gcc(Linux)、VC(Windows)等C语言编译环境。三、实验内容和步骤1)编写一个程序,随机选择3个较大的数x、e、n,然后计算xe mod n,记录程序运行时间。实际中应用的素数为512位,n也就为1024位。这样的大数在计算机上如何表示、如何进行运算,查阅资料给出简单说明。RSA依赖大数运算,目前主流RSA算法都建立在512位到1024位的大数运算之上,所以我们在现阶段首先需要掌握1024位的大数运算原理。大多数的编译器只能支持到64位的整数运算,即我们在运算中所使用的整数必须小于等于64位,即:0xffffffffffffffff也就是,这远远达不到RSA的需要,于是需要专门建立大数运算库来解决这一问题。最简单的办法是将大数当作字符串进行处理,也就是将大数用10进制字符数组进行表示,然后模拟人们手工进行“竖式计算”的过程编写其加减乘除函数。但是这样做效率很低,因为1024位的大数其10进制数字个数就有数百个,对于任何一种运算,都需要在两个有数百个元素的数组空间上做多重循环,还需要许多额外的空间存放计算的进位退位标志及中间结果。当然其优点是算法符合人们的日常习惯,易于理解。另一种思路是将大数当作一个二进制流进行处理,使用各种移位和逻辑操作来进行加减乘除运算,但是这样做代码设计非常复杂,可读性很低,难以理解也难以调试。(2)计算机在生成一个随机数时,并不一定就是素数,因此要进行素性检测。是否有确定的方法判定一个大数是素数,要查阅资料,找出目前实际可行的素数判定法则,并且比较各自的优缺点。所谓素数,是指除了能被1和它本身整除而不能被其他任何数整除的数。根据素数的定义,只需用2到N-1去除N,如果都除不尽则N是素数,结束知其循环。由此得算法1。(1) flay=0,i=2. /*flay为标志,其初值为0,只要有一个数除尽,其值变为1.(2) If n mod i=0 then flay=l else i=i+1/* n mod i是n除以i的余数.(3) If flay=0 and I<=n-1 then(2) else go (4)(4) If flay=0 then write“n是素数。”else write“不是素数”最坏的情形下,即N是素数时,算法1需要执行N-2次除法,时间复杂性太大。假设N桶分解成iXj(i,j是小于N的整数),则必存在一个因子(1<=i<=int(n)),这样只需用2到int(n)去除N即可,于是循环次数可以大减小,由此得出算法2算法2(改进算法)(1) flag=0,i=2(2) if n mod i then flag=1else i=i+1(3) if flag=0 and i<=int(n) then go(2) else go(4)(4) if flah=0 then write”n是素数”else write “n不是素数“。最坏的情形下,即当N是纱数时1需要执行int(n)-1次除法。虽然算法2比算法1确是快了不小,但有重复计算,如果用2去除N时若不尽则用2的倍数去除N也除不尽,于是只要2除不尽,2的倍数就不用去除,这样可以减少除法次数,由此得出算法3(1)for(i=2;int(n);i+)marki=0/*mark是标记其初值为0,只要它的因子除不尽其值变为1。(2)i=2,flag=0(3)while(flag=0and i<=int(n) If marki=0Then If n mod i=0 Then flag=1 Else S=i+i While s<int(n) Marks=1 S=s+ii=i+1(4)if flag=0 then write”n是素数。Else write “N不是素数。“该算法迭代重复次数仍为int(n)次,但是筛法算法在执行过程中,每次都筛去许多数,使下一次迭代时不用再除法而只做比较,比较比除法运算要简单得多,因此实际执行速度比算法1,算法2要得多。当然,对于素数的判定还有别的方法,如用概率算法求素数,但其理论太难,一般情况下很少用。关于素数的判定问题还有待发现简单更高效的方法。(3)附件中给出了一个密码算法库,其中包括各种对称加密算法、非对称加密算法、Hash算法和数字签名算法。找出其中关于RSA算法的部分,并且基于标准输入输出写一段用RSA加密文件的程序。程序代码:#include<iostream>#include "mycrypt.h"using namespace std;int main(void)int err, hash_idx, prng_idx, res;unsigned long l1,l2;unsigned char pt2128,out1024;rsa_key key;/* register prng/Hash */if (register_prng(&sprng_desc) =-1) printf("Error registering sprng");return EXIT_FAILURE;if (register_hash(&sha1_desc) =-1) printf("Error registering sha1");return EXIT_FAILURE;hash_idx = find_hash("sha1");prng_idx = find_prng("sprng");/* make an RSA-1024 key */if (err = rsa_make_key(NULL, /* PRNG state */prng_idx,/* PRNG idx */1024/8, /* 1024-bit key */65537,/* we like e=65537 */&key)/* where to store the key */) != CRYPT_OK) printf("rsa_make_key %s", error_to_string(err);return EXIT_FAILURE;FILE *fd1;FILE *fd2;FILE *fd3; fd1=fopen("plaintext1.txt","rb");fd2=fopen("cipertext.txt","wb");int count=0;unsigned char p_buf16;unsigned char tt="TestApp"l1 = sizeof(out);while(true)count=fread(p_buf,sizeof(unsigned char),16,fd1); for(int j=0;j<count;j+)cout<<p_bufj;if (err = rsa_encrypt_key(p_buf,/* data we wish to encrypt */count,/* data is 16 bytes long */out, /* where to store ciphertext */&l1, /* length of ciphertext */tt,/* our lparam for this program */7,/* lparam is 7 bytes long */NULL,/* PRNG state */prng_idx,/* ping idx */hash_idx,/* Hash idx */&key)/* our RSA key */) != CRYPT_OK) printf("rsa_encrypt_key %s", error_to_string(err);return EXIT_FAILURE;fwrite(out,sizeof(unsigned char),l1,fd2);if(count<16)break;count=0; fclose(fd1);fclose(fd2);fd2=fopen("cipertext.txt","rb");fd3=fopen("plaintext2.txt","wb");unsigned char c_buf128;long l3=sizeof(c_buf); while(true)count=fread(c_buf,sizeof(unsigned char),128,fd2);if(count=0)break;l2=sizeof(pt2);if(err=rsa_decrypt_key(c_buf,/*encrypted data*/l3,/*length of ciphertext*/pt2,/*where to put plaintext*/&l2,/*plaintext length*/tt,/*lparam for this program*/7,/*lparam is 7 bytes long*/NULL,/*PRNG state*/prng_idx,/*prng idx*/hash_idx,/*hash idx*/&res,/*validity of data*/&key)/*our RSA key*/) != CRYPT_OK)printf("err=rsa_decrypt_key %s",error_to_string(err);return EXIT_FAILURE;for(int k=0;k<l2;k+)cout<<pt2k; fwrite(pt2,sizeof(unsigned char),l2,fd3);count=0; fclose(fd2);fclose(fd3);return 0;程序执行结果如下:加密前的明文为:加密后的密文为:心得体会对非对称密码算法RSA的理解加深了,会运用一些现成的算法进行编程,对一些比较复杂的算法开始基本认识并深刻的掌握。

    注意事项

    本文(计算机网络安全实验报告--非对称密码算法RSA(共10页).doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开