rsa加密c语言源码库,RSA加密算法源代码C语言实现.doc-资源下载在线文库www.lddoc.cn...

RSA加密算法_源代码__C语言实现.doc

RSA 算法 1978 年就出现了这种算法,它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名Ron Rivest, AdiShamir 和 Leonard Adleman。但 RSA 的安全性一直未能得到理论上的证明。RSA 的安全性依赖于大数难于分解这一特点。公钥和私钥都是两个大素数(大于 100个十进制位)的函数。据猜测,从一个密钥和密文推断出明文的难度等同于分解两个大素数的积。密钥对的产生。选择两个大素数,p 和 q 。计算n p * q 然后随机选择加密密钥e,要求 e 和 p - 1 * q - 1 互质。最后,利用 Euclid 算法计算解密密钥 d, 满足 e * d 1 mod p - 1 * q - 1 其中 n 和 d 也要互质。数 e 和 n 是公钥,d 是私钥。两个素数 p和 q 不再需要,应该丢弃,不要让任何人知道。加密信息 m(二进制表示)时,首先把m 分成等长数据块 m1 ,m2,., mi ,块长 s,其中 2s include include using namespace std;RSA 算法所需参数typedef struct RSA_PARAM_Tagunsigned int64 p, q; 两个素数,不参与加密解密运算unsigned int64 f; fp-1*q-1,不参与加密解密运算unsigned int64 n, e; 公匙,np*q,gcde,f1unsigned int64 d; 私匙,e*d1 mod f ,gcdn,d1unsigned int64 s; 块长,满足 2s1; aa * a n; 函数看起来可以处理 64 位的整数,但由于这里 a*a 在 a232 时已经造成了溢出,因此实际处理范围没有 64 位aMulModa, a, n; b; ca * c n; 这里也会溢出,若把 64 位整数拆为两个 32 位整数不知是否可以解决这个问题。cMulModa, c, n; return c;/*Rabin-Miller 素数测试,通过测试返回 1,否则返回 0。n 是待测素数。注意通过测试并不一定就是素数,非素数通过测试的概率是 1/4*/long RabinMillerKnlunsigned int64 mn - 1;j0; 0、先计算出 m、j ,使得 n-1m*2j,其中 m 是正奇数,j 是非负整数whilem m1; 1、随机取一个 b,2 q p q;unsigned int64 bp q p q;unsigned int64 bp 1;b1; ifa 如果 a 为偶数,交换 a, bab;bt; dowhileb b 为偶数,a 为奇数时,gcdb,agcdb/2,a ifb 1; b、a 都是奇数,gcdb,agcdb-a/2,a whileb;return r * a;/*已知 a、b,求 x,满足 a*x 1 mod b相当于求解 a*x-b*y1 的最小整数解*/unsigned int64 Euclidunsigned int64 long xx, yy;mb;ea;x0;y1;xx1;yy1;whileeim / e;jm e;me;ej;jy;y*i;ifxx yyifx yyx - y;elsey-x;yy0;elseyx;xx1 - xx;yy1 - yy; xj; ifxx 0xb - x; return x;/*随机产生一个 RSA 加密参数*/RSA_PARAM RsaGetParamvoidRSA_PARAM Rsa 0 ;unsigned int64 t;Rsa.pRandomPrime16; 随机生成两个素数Rsa.qRandomPrime16;Rsa.nRsa.p * Rsa.q;Rsa.fRsa.p - 1 * Rsa.q - 1;doRsa.eg_Rnd.Random65536; 小于 216,65536216Rsa.e|1; 保证最低位是 1,即保证是奇数,因 f 一定是偶数,要互素,只能是奇数 whileSteinGcdRsa.e, Rsa.f 1; Rsa.dEuclidRsa.e, Rsa.f;Rsa.s0;tRsa.n 1;whiletRsa.s; slog2nt1; return Rsa;/*拉宾米勒测试*/void TestRMvoidunsigned long k0;cout “ - Rabin-Miller prime check.n“ endl;forunsigned int64 i4197900001; i 4198000000; i2ifRabinMilleri, 30k;cout i endl; cout “Total “ k endl;/*RSA 加密解密*/void TestRSAvoidRSA_PARAM r;char pSrc“abcdefghijklmnopqrstuvwxyz“;const unsigned long nsizeofpSrc;unsigned char *q, pDecn;unsigned int64 pEncn;rRsaGetParam;cout “p“ r.p endl;cout “q“ r.q endl;cout “fp-1*q-1“ r.f endl;cout “np*q“ r.n endl;cout “e“ r.e endl;cout “d“ r.d endl;cout “s“ r.s endl;cout “Source“ pSrc endl;q unsigned char *pSrc;cout “Encode“;forunsigned long i0; i n; ipEnciPowModqi, r.e, r.n;cout hex pEnci “ “; cout endl;cout “Decode“;forunsigned long i0; i n; ipDeciPowModpEnci, r.d, r.n;cout hex unsigned longpDeci “ “; cout endl;cout char *pDec endl;/* */int mainvoidTestRSA;return 0;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/266875.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apollo2.5摄像头安装

前言:在Apollo美研团队和长沙CiDi团队的支持下,最近完成了Apollo推荐的摄像头AR023ZWDR(Rev663F12)调试,在这里对Apollo的笔记做一个补充,希望以后的开发者不用在踩我们踩过的坑。 在本博客中提到的补充文件在我的百度网盘中&…

Linux下查看出口IP

使用的几个其他的命令,好像这个都不太靠谱。 但也想写一个很简单的程序就在服务器端的request里面能取得IP, 这个也有人已经在公网上有这样的程序啊 所以这个就简单了 wget http://members.3322.org/dyndns/getipcat getip 这样试试吧。

r语言教程w3c,R语言 数据库

数据是关系数据库系统以规范化格式存储。 因此,要进行统计计算,我们将需要非常先进和复杂的Sql查询。 但R语言可以轻松地连接到许多关系数据库,如MySql,Oracle,Sql服务器等,并从它们获取记录作为数据框。 一…

HTML 文档流和文本流的理解

文本流,概括地说其实就是一系列字符,是文档的读取和输出顺序,也就是我们通常看到的由左到右、由上而下的读取和输出形式,在网页中每个元素都是按照这个顺序进行排序和显示的,而position属性可以将元素从文本流脱离出来…

CCNA实验(一)

无线局域网(WLAN)回顾 使用无线射频信号、载波监听多路访问/冲突避免、半双工。 无线AP相当于以太网的HUB。 有些频段是受限的。 无线信号遇到的问题: l 反射 l 散射 l 信号吸收(比如说穿墙) 无线标准 l ITU-R l …

linux中postfix(基于源码)的邮件系统

一、安装前的准备工作: 首先配置yum服务器,安装dns 1、安装所需的rpm包,这包括以下这些: httpd, php, php-mysql, mysql, mysql-server, mysql-devel, openssl-devel, dovecot, perl-DBD-MySQL, tcl, tcl-devel, libart_lgpl, li…

UE4 集成讯飞听写插件

搞了几天,有些坑记录一下。 3个方面的知识需要学习 1、制作UE4插件 2、引入第三方库 3、讯飞听写的api 一看是参考 https://blog.csdn.net/u012793104/article/details/78067937 http://doc.xfyun.cn/msc_windows/%E8%AF%AD%E9%9F%B3%E5%90%AC%E5%86%99.html API&am…

c51单片机有几个终端语言,吃过大亏,才知道要从51单片机入手

原标题:吃过大亏,才知道要从51单片机入手在这里,我就不说什么是单片机了,而是说说怎样学单片机,就我个人而言先学51,因为这个单片机在中国市场上发展了几十年了,现在工程中用的比较多的也是MCS-51, 它的资料…

c primer plus(第五版)读书笔计 第二章(3)

// 2-2.c --------把两个fathoms换算成英尺#include <stdio.h>int main (void){int feet, fathoms;fathoms 2;feet 6 * fathoms;printf ("There are %d feet in %d fathoms !\n",feet,fathoms);printf ("Yes , I said %d feet !\n",6 * fathoms);r…

云计算-openstack简介

云计算云计算是一种按使用量付费的模式&#xff0c;这种模式提供可用的、便捷的、按需的网络访问&#xff0c; 进入可配置的计算资源共享池&#xff08;资源包括网络&#xff0c;服务器&#xff0c;存储&#xff0c;应用软件&#xff0c;服务&#xff09;&#xff0c;这些资源能…

C语言循环不执行语句,求大神来看一下 为什么for循环中scanf语句不执行?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include#define MAX_VERTEX_NUM 20typedef struct{char vexs[MAX_VERTEX_NUM];// 顶点向量int AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];// 邻接矩阵intvexnum, arcnum;// 顶点数、边/弧数}MGraph;int n,path[100];bool visite…

医疗项目中对网编的一些理解看法

医疗项目中对网编的一些理解看法。做网络营销都有一个前提&#xff0c;那就是以用户为中心&#xff0c;站在用户的角度考 虑问题。在网络营销中&#xff0c;网编如何提升充实自己&#xff1f;怎么获得信息渠道&#xff1f;见多&#xff1a;多看&#xff0c;多了解行业的变化&am…

android 自定义view画表格,Android自定义View实现课程表表格

自己闲下来时间写的一个课表控件&#xff0c;使用的自定义LinearLayout&#xff0c;里面View都是用代码实现的&#xff0c;最终效果如下图&#xff0c;写的可能有问题希望多多指点创建一个自定义LinearLayout 控件用来装载课程的信息和课程的周数&#xff0c;和节数大概的布局三…

26.中继器数据的添加与删除

选择中继器里面的数据集再选择增加行 勾上之后选择下方的增加行就可以填入数据了 用变量获取用户输入的各项内容 但是图片不能用公式操作 方法&#xff1a;通过右键单击图片获得图片的地址 图片中蓝色的部分就是相对路径 把这个路径放到中继器的数据里就可以用了 以上是添加&am…

如何在android模拟器中安装apk软件

这个是我从别的网站上看到的&#xff0c;而且亲身试验了&#xff0c;是可以的&#xff0c;和大家分享一下&#xff01;如何在模拟器上安装apk软件 首先我们需要的是在电脑上安装Android系统的模拟器。安装模拟器&#xff0c;需要需要下载Android SDK&#xff1a;SDK由官方网站…

android工作机制和内核,android内核剖析学习笔记:AMS(ActivityManagerService)内部原理和工作机制...

一、ActivityManagerService提供的主要功能&#xff1a;(1)统一调度各应用程序的Activity(2)内存管理(3)进程管理二、启动一个Activity的方式有以下几种&#xff1a;(1)在应用程序中调用startActivity启动指定的Activity(2)在Home程序中单击一个应用图标&#xff0c;启动新的Ac…

从.Net到Java学习第四篇——spring boot+redis

从.Net到Java学习系列目录 “学习java已经十天&#xff0c;有时也怀念当初.net的经典&#xff0c;让这语言将你我相连&#xff0c;怀念你......”接上一篇&#xff0c;本篇使用到的框架redis、FastJSON。 环境准备 安装redis&#xff0c;下图是我本机的redis绿色版&#xff0c;…

hdu 4409 Family Name List LCA +stl

http://acm.hdu.edu.cn/showproblem.php?pid4409 赛后才过只能说悲剧了&#xff0c;知道思路&#xff0c;stl不熟悉&#xff0c;所以导致写的很慢....占据了很多时间&#xff0c;手速代码准确度。。哎。。。 题意&#xff1a; 给你一个家谱&#xff0c;n个人的姓名&#xff0c…

mysql杂记

1、 mysql安装完成后需要将mysql里面的bin目录加到环境变量里之后&#xff0c;才能在cmd窗口里使用mysql命令 2、 在CMD命令窗口敲入命令 mysql -hlocalhost -uroot -ppassword进入mysql数据库 这里我的用户名是root&#xff0c;密码是123456 转载于:https://www.cnblogs.com/y…

android包名更换后升级方案,Android增量升级方案

背景随着业务的发展&#xff0c;安装包的体积也在不断的增大&#xff0c;这时候&#xff0c;如果要版本更新&#xff0c;用户不得不去下载完整的安装包。但是如果使用增量升级方案&#xff0c;用户只需要下载新旧版本的差异包&#xff0c;然后在本地合成就行&#xff0c;这样省…