RSA加密的大数实现-OPENSSL库的实现
创始人
2024-09-26 01:50:57
0

注意:

我使用的是linux系统,虚拟机kali,相关的安装博客大家在社区里找一下就有,我就不赘述了

RSA实验原理:

加密基础过程

       1) 调用OpenSSL库生成秘钥(非必要步骤,如果已经有秘钥对了,就不需要进行这步了)

       2) 调用OpenSSL库对明文进行加密

       2) 对加密后密文进行BASE64转码(非必要步骤,一般开发过程中,为了传输or存贮方便,都会对密文进行BASE64编码)

       注意:OpenSSL的RSA加密接口,每次加密数据的最大长度是有限制的,所以对“较大数据”进行加密,需要循环对“较大数据”分段加密

解密基础过程

       1)对BASE64内容进行BASE64解码

       2) 调用OpenSSL库对密文进行解密

       注意:OpenSSL的RSA解密接口,每次解密数据的最大长度是有限制的,所以对“较大数据”进行解密,需要循环对“较大数据”分段解密

实验要求:

使用OPENSSL提供的功能实现大数运算,完成RSA的加密,明文为 姓名+学号

搭建环境

首先使用linux环境安装虚拟机(这里我使用的是kali)

输入如下命令,注意在使用之前要先提权,将权限提升至管理员级别

$ sudo apt-get update

$ sudo apt-get install libssl-dev

Openssl作用举例:
打印出一个大数。  无效printBN(char *msg, BIGNUM * a)  { //将BIGNUM转换为数字字符串  char * number_str = BN_bn2dec(a);  //打印出数字字符串  Printf ("%s %s\n", msg, number_str);  //释放动态分配内存  OPENSSL_free (number_str); } 

实验源码:

#include #include  #include //引入openssl库 #define NBITS 256 void str_2_hex_str(char *dest, char *src) {     int size = strlen(src);      int i,j;      for (i = 0, j = 0; i < size; i++) {         sprintf(&dest[j], "%02X", src[i]);         j+=2;      }     dest[j] = '\0';  } void printBN(char *msg,BIGNUM *a) { 	char *number_str=BN_bn2hex(a); 	printf("%s %s\n",msg,number_str); 	OPENSSL_free(number_str);  } int main(){ char p1[33]="F7E75FDC469067FFDC4E847C51F452DF"; char res[32]; char data[64]; char p2[33]="F7E75FDC469067FFDC4E847C51F452DE"; char q1[33]="E85CED54AF57E53E092113E62F436F4F"; char q2[33]="E85CED54AF57E53E092113E62F436F4E"; char e1[33]="0D88C3"; scanf("%s",data); str_2_hex_str(res,data); BN_CTX *ctx =BN_CTX_new(); BIGNUM *p=BN_new(); BN_hex2bn(&p,p1); BIGNUM *q=BN_new(); BN_hex2bn(&q,q1); BIGNUM *P=BN_new(); BN_hex2bn(&P,p2); BIGNUM *Q=BN_new(); BN_hex2bn(&Q,q2); BIGNUM *n=BN_new(); BN_mul(n,p,q,ctx);  BIGNUM *fn=BN_new(); BN_mul(fn,P,Q,ctx); BIGNUM *e=BN_new(); BN_hex2bn(&e,e1); BIGNUM *d=BN_new(); BN_mod_inverse(d,e,fn,ctx); BIGNUM *M=BN_new();  BN_hex2bn(&M,res);  BIGNUM *c=BN_new(); BN_mod_exp(c,M,e,n,ctx); BIGNUM *m=BN_new(); BN_mod_exp(m,c,d,n,ctx); printBN("p:",p); printBN("q:",q); printBN("N:",n); printBN("fai(n):",fn); printBN("e:",e); printBN("d:",d); printBN("M:",M); printBN("m^e mod n = \n",c); printBN("c^d mod n = \n",m); }  

实验结果:

我们将姓名和学号当做明文,验证程序,发现程序运行良好且结果正确

(这里需要再最后./rsa之后输入你要加密的内容,为了隐私我就不展示了)

OpenSSL是一个开源的软件库,实现了密码学算法,包括RSA加密算法。OpenSSL提供了丰富的API,使得开发者可以方便地在应用程序中实现RSA加密、解密、签名和验证等功能。

OpenSSL库对RSA运算的帮助:

跨平台:OpenSSL支持多种操作系统,包括Windows、Linux和macOS,这使得开发者可以在不同平台上使用相同的代码实现RSA运算。

性能优化:OpenSSL的实现经过了优化,可以高效地处理RSA运算,尤其是在处理大数运算时。

功能丰富:除了基本的RSA运算,OpenSSL还提供了密钥生成、证书管理、SSL/TLS协议实现等高级功能。

实验感悟:

易用性:在使用OpenSSL进行RSA实验时,我深刻体会到了其API的易用性。通过简单的函数调用,我能够快速实现RSA加密和解密,而无需深入了解背后的数学原理。

性能体验:在实验中,我注意到OpenSSL在处理大数运算时的性能表现。通过比较不同实现,我认识到了优化算法和数据结构在提高性能方面的重要性。

安全性意识:使用OpenSSL让我意识到了安全性的重要性。在实验过程中,我学习了如何安全地生成密钥、存储密钥以及如何避免常见的安全漏洞。

通过OpenSSL库的使用,我不仅提高了在密码学领域的实践能力,也加深了对RSA算法及其在现代加密技术中作用的理解。

Openssl是一个大数处理库,对于1024比特的数据而言,普通的高级语言没有办法完成,比如C语言,可能64位就已经是极限了,而对于OPENSSL来说,1024比特也可以很容易的运算。

相关内容

热门资讯

安卓10系统更新关闭,全面优化... 你知道吗?最近安卓系统又来了一次大动作,那就是安卓10系统的更新关闭了!这可真是让人有点摸不着头脑,...
安卓系统的文件加密,Andro... 你知道吗?在咱们这个数字化时代,保护隐私和安全变得比以往任何时候都重要。尤其是对于安卓系统用户来说,...
使用安卓系统的费用,全面了解使... 你有没有想过,为什么有些人拿着安卓手机,而有些人却选择了苹果?这其中可不仅仅是品牌喜好那么简单,使用...
vivo用原生安卓系统下载,尽... 你有没有发现,现在手机市场真是热闹非凡,各种品牌争奇斗艳,让人眼花缭乱。不过,今天我要给你安利的,可...
安卓系统好用的桌面时钟,实用好... 你有没有发现,手机里的时钟功能有时候比闹钟还重要呢?想象每天早上被它温柔地叫醒,或者在忙碌的工作间隙...
安卓系统导航车载用优盘,安卓车... 你有没有想过,开车的时候,手机导航虽然方便,但有时候屏幕太小,看不清路线?别急,今天就来给你安利一个...
正确使用电池安卓系统,无忧体验 你知道吗?现在这个智能手机时代,电池续航能力可是大家关注的焦点。尤其是安卓系统用户,电池使用得当与否...
玩吧安卓可以和苹果系统,畅享游... 你知道吗?现在这个时代,手机可是我们生活中不可或缺的好伙伴。不管是安卓还是苹果,它们各有各的特色,各...
安卓系统怎么去掉hd,恢复纯净... 你是不是也和我一样,对安卓手机的系统设置充满了好奇?尤其是那个让人眼花缭乱的“HD”标识,有时候看着...
电脑安卓系统性能表,电脑版性能... 你有没有发现,现在手机电脑的操作系统越来越丰富,尤其是安卓系统,简直就像是个万能的小精灵,啥都能干。...
如何玩转机车安卓系统,玩转机车... 你有没有想过,拥有一台酷炫的机车安卓系统,让你的手机瞬间变身成为一辆会跑的摩托车?想象你可以在手机上...
安卓系统网页怎么回顶部,按钮才... 你是不是在使用安卓系统的手机或平板电脑浏览网页时,不小心翻到了页面底部,现在想回到顶部,却有点摸不着...
为什么安卓系统要认证,安卓系统... 你知道吗?安卓系统最近可是掀起了一阵认证热潮,这可不仅仅是简单的更新换代那么简单哦!为什么安卓系统要...
安卓50原生系统手机,功能革新... 你有没有发现,最近你的安卓手机突然变得不一样了?是不是因为它的系统升级到了安卓50原生系统呢?没错,...
安卓永远比不了的系统,永远无法... 你有没有想过,为什么安卓系统永远比不了某些其他系统呢?是不是每次看到那些流畅无阻、功能强大的设备,心...
安卓8怎么升级11系统,解锁新... 你有没有发现,你的安卓手机已经有点儿“老态龙钟”了?别急,别急,今天就来教你怎么给它来个青春焕发的大...
双系统安卓笔记本,开启移动办公... 你有没有想过,一台既能流畅运行安卓应用,又能轻松驾驭Windows系统的笔记本,会是怎样的体验呢?没...
安卓系统调降噪通透软件,打造清... 你有没有发现,最近你的安卓手机在听音乐或者打电话的时候,声音变得超级清晰,仿佛置身于现场?这可不是你...
安卓系统包后缀名,包后缀名背后... 你有没有发现,每次下载安卓应用时,文件名后面总会有那么几个神秘的字母组合,像是“apk”、“jar”...
安卓系统好用的工作软件,盘点十... 你有没有发现,自从你把手机里的安卓系统升级后,工作效率好像提高了不少呢?今天,就让我来给你细细道来,...