='a'&&g[i]g[i]-=32;for(i=0;i{if(g[i]='A')g[i]+=3;elseif(g[i]>'W'&&g[i]g[" />
搜档网
当前位置:搜档网 › 加密及解密算法(利用C语言)

加密及解密算法(利用C语言)

加密及解密算法(利用C语言)
加密及解密算法(利用C语言)

利用VC++6.0

C语言进行设计加密:

#include "stdio.h"

#include"string.h"

void main()

{

int i,k,h;

char g[26];

printf("请输入字符窜\n");

gets(g);

k=strlen(g);

do{

for(i=0;i

if(g[i]>='a'&&g[i]<='z')

g[i]-=32;

for(i=0;i

{if(g[i]<'X'&&g[i]>='A')

g[i]+=3;

else if(g[i]>'W'&&g[i]<='Z')

g[i]-=23;

}

printf("%s\n",g);

printf("0-退出任意键继续\n");

scanf("%d",&h); }

while(h);

}

2.进行解密算法

#include "stdio.h"

#include"string.h"

void main()

{

int i,k,h;

char g[26];

printf("请输入字符窜\n");

gets(g);

k=strlen(g);

do{

for(i=0;i

if(g[i]>='d'&&g[i]<='z')

g[i]-=3;

else if(g[i]>'d'&&g[i]<='a')

g[i]+=23;

for(i=0;i

if(g[i]>='D'&&g[i]<='Z')

g[i]-=3;

else if(g[i]>'D'&&g[i]<='A')

g[i]+=23;

printf("%s\n",g);

printf("0-退出任意键继续\n");

scanf("%d",&h); }

while(h);

}

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

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,其中2^s <= n, s 尽可能的大。对应的密文是:ci = mi^e ( mod n ) ( a ) 解密时作如下计算:mi = ci^d ( mod n ) ( b ) RSA 可用于数字签名,方案是用( a ) 式签名,( b )式验证。具体操作时考虑到安全性和m信息量较大等因素,一般是先作HASH 运算。RSA 的安全性。RSA的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,因为没有证明破解RSA 就一定需要作大数分解。假设存在一种无须分解大数的算法,那它肯定可以修改成为大数分解算法。目前,RSA的一些变种算法已被证明等价于大数分解。不管怎样,分解n是最显然的攻击方法。现在,人们已能分解140多个十进制位的大素数。因此,模数n必须选大一些,因具体适用情况而定。 由于进行的都是大数计算,使得RSA最快的情况也比DES慢上100倍,无论是软件还是硬件实现。速度一直是RSA的缺陷。一般来说只用于少量数据加密。 */ #include #include #include

RC4加密算法C语言实现

RC4 加密算法 C 语言实现 代码文件名 RC4.cpp Encrypt.h (代码详见后文) 备注:将以上两个文件放在相同的路径(建议不要放在中文路径 下)编译执行!编译环境 Microsoft Visual C++ 6.0 C-Free 5.0 代码解释 RC4 加密算法是大名鼎鼎的RSA 三人组中的头号人物Ron Rivest 在1987 年设计的密钥长度可变的流加密算法簇。之所以称其为簇,是由于其核心部分的S-box 长度可为任意,但一般为256字节。该算法的速度可以达到DES 加密的10倍左右。 RC4 算法的原理很简单,包括初始化算法和伪随机子密码生成算法两大部分。假设S-box 长度和密钥长度均为为n。先来看看算法的初始化部分(用类C伪代码表示): for (i=0; i

} 得到的子密码sub_k用以和明文进行xor运算,得到密文,解密过程也完全相同。 RC4加密算法在C++中的实现: RC4函数(加密/解密):其实RC4只有加密,将密文再加密一次,就是解密了。 GetKey函数:随机字符串产生器。 ByteToHex函数:把字节码转为十六进制码,一个字节两个十六进制。十六进制字符串非常适合在HTTP中传输。 HexToByte函数:把十六进制字符串,转为字节码。。 Encrypt函数:把字符串经RC4加密后,再把密文转为十六进制字符串返回,可直接用于传输。 Decrypt函数:直接密码十六进制字符串密文,再解密,返回字符串明文。 源代码 以下为Encrypt.h文件代码 #ifndef _ENCRYPT_RC4_ #defi ne _ENCRYPT_RC4_ #in clude #defi ne BOX_LEN 256 int GetKey(c onst un sig ned char* pass, int pass_le n, un sig ned char *out); int RC4(c onst un sig ned char* data, int data_le n, const un sig ned char* key, int key_le n, un sig ned char* out, i nt* out_le n); static void swap_byte( un sig ned char* a, un sig ned char* b); char* En crypt(co nst char* szSource, const char* szPassWord); // 加密,返回加密结果 char* Decrypt(co nst char* szSource, con st char* szPassWord); // 解密,返回解密结果 char* ByteToHex(c onst un sig ned char* vByte, const int vLe n); // 把字节码pbBuffer转为十六进制字符串,方便传输 unsigned char* HexToByte(const char* szHex); // 把十六进制字符串转为字节码pbBuffer,解码 #e ndif // #ifndef _ENCRYPT_RC4_

RSA加密解密的设计与实现

RSA加密解密的设计与实现

上海电力学院 《应用密码学》课程设计 题目: RSA加密解密的设计与实现 院系:计算机科学与技术学院 专业年级:级 学生姓名:李正熹学号: 3273 指导教师:田秀霞 1月 8日 目录

目录 1.设计要求 2.开发环境与工具 3.设计原理(算法工作原理) 4.系统功能描述与软件模块划分 5.设计核心代码 6.参考文献 7. 设计结果及验证 8. 软件使用说明 9. 设计体会 附录 1.设计要求

1 随机搜索大素数,随机生成公钥和私钥 2 用公钥对任意长度的明文加密 3 用私钥对密文解密 4 界面简洁、交互操作性强 2.开发环境与工具 Windows XP操作系统 Microsoft Visual C++ 6.0 1.创立rsa工程

2.在rsa工程中创立 3273 李正熹cpp文件 3.设计原理 RSA算法简介 公开密码算法与其它密码学完全不同,它是基于数学函数而不是基于替换或置换。与使用一个密钥的对称算法不同,公开密钥算法是非对称的,而且它使用的是两个密钥,包括用于加密的公钥和用于解密的私钥。公开密钥算法有RSA、Elgamal等。 RSA公钥密码算法是由美国麻省理工学院(MIT)的Rivest,Shamir和Adleman在1978年提出来的,并以她们的名字的有字母命名的。RSA是第一个安全、实用的公钥密码算法,已经成为公钥密码的国际标准,是当前应用广泛的公钥密码体制。

RSA的基础是数论的Euler定理,其安全性基于二大整数因子分解问题的困难性,公私钥是一对大素数的函数。而且该算法已经经受住了多年深入的密码分析,虽然密码分析者既不能证明也不能否定RSA的安全性,但这不恰恰说明该算法有其一定的可信度。 4.系统功能描述与软件模块划分 功能:

RSA加密算法加密与解密过程解析

RSA加密算法加密与解密过程解析 1.加密算法概述 加密算法根据内容是否可以还原分为可逆加密和非可逆加密。 可逆加密根据其加密解密是否使用的同一个密钥而可以分为对称加密和非对称加密。 所谓对称加密即是指在加密和解密时使用的是同一个密钥:举个简单的例子,对一个字符串C做简单的加密处理,对于每个字符都和A做异或,形成密文S。 解密的时候再用密文S和密钥A做异或,还原为原来的字符串C。这种加密方式有一个很大的缺点就是不安全,因为一旦加密用的密钥泄露了之后,就可以用这个密钥破解其他所有的密文。 非对称加密在加密和解密过程中使用不同的密钥,即公钥和私钥。公钥用于加密,所有人都可见,私钥用于解密,只有解密者持有。就算在一次加密过程中原文和密文发生泄漏,破解者在知道原文、密文和公钥的情况下无法推理出私钥,很大程度上保证了数据的安全性。 此处,我们介绍一种非常具有代表性的非对称加密算法,RSA加密算法。RSA 算法是1977年发明的,全称是RSA Public Key System,这个Public Key 就是指的公共密钥。 2.密钥的计算获取过程 密钥的计算过程为:首先选择两个质数p和q,令n=p*q。 令k=?(n)=(p?1)(q?1),原理见4的分析 选择任意整数d,保证其与k互质 取整数e,使得[de]k=[1]k。也就是说de=kt+1,t为某一整数。

3.RSA加密算法的使用过程 同样以一个字符串来进行举例,例如要对字符串the art of programming 进行加密,RSA算法会提供两个公钥e和n,其值为两个正整数,解密方持有一个私钥d,然后开始加密解密过程过程。 1. 首先根据一定的规整将字符串转换为正整数z,例如对应为0到36,转化后形成了一个整数序列。 2. 对于每个字符对应的正整数映射值z,计算其加密值M=(N^e)%n. 其中N^e表示N的e次方。 3. 解密方收到密文后开始解密,计算解密后的值为(M^d)%n,可在此得到正整数z。 4. 根据开始设定的公共转化规则,即可将z转化为对应的字符,获得明文。 4.RSA加密算法原理解析 下面分析其内在的数学原理,说到RSA加密算法就不得不说到欧拉定理。 欧拉定理(Euler’s theorem)是欧拉在证明费马小定理的过程中,发现的一个适用性更广的定理。 首先定义一个函数,叫做欧拉Phi函数,即?(n),其中,n是一个正整数。?(n)=总数(从1到n?1,与n互质整数) 比如5,那么1,2,3,4,都与5互质。与5互质的数有4个。?(5)=4再比如6,与1,5互质,与2,3,4并不互质。因此,?(6)=2

实验四RSA加解密算法的实现

实验四 RSA加解密算法的实现 一.实验目的 1、对算法描述可进行充分理解,精确理解算法的各个步骤。 2、完成RSA软件算法的详细设计。 3、用C++完成算法的设计模块。 4、编制测试代码。 二.实验内容 1.实验原理及基本技术路线图(方框原理图) 加密过程: 第一步,用户首先输入两个素数p和q,并求出 n = p*q,然后再求出n的欧拉函数值phi。 第二步,在[e,phi]中选出一个与phi互素的整数e,并根据e*d ≡1(mod phi),求出e的乘法逆元。至此我们已经得到了公开密钥{e,n}和秘密密钥{d,n}。 第三步,让用户输入要进行加密的小于n一组正整数(个数不超过MAXLENGTH=500),输入以-1为结束标志,实际个数存入size中,正整数以clear[MAXLENGTH]保存。 第四步,对第三步所得的明文clear[MAXLENGTH]进行加密。遍历clear[size],对每一个整数用以下算法进行加密,并将加密后的密文保存在Ciphertext[MAXLENGTH]中。 注意:此处不能用m2[j] = clear[j] ^ e整数的幂,因为当e和clear[j]较大时,会发生溢出,至使出现无法预料的结果。 第五步,输出加密后的密文。 解密过程: 第一步,根据在以上算法中求出的解密密钥[d,phi],对加密后的密文Ciphertext[MAXLENGTH]进行解密,结果保存在DecryptionText[MAXLENGTH]中,算法如下: 第二步,输出对加密前的明文和加密并解密后的密文进行比较,判断两个数组是否一致,从而得知算法是否正确。

2.所用仪器、材料(设备名称、型号、规格等) 计算机一台、vc6.0 3.实验方法、步骤 #include #include using namespace std; #define MAXLENGTH 500 //明文最大长度,即所允许最大整数个数 int size = 0;//保存要进行加密的正整数的个数 int p, q; //两个大素数 int n, phi; //n = p * q,phi = (p-1) * (q-1) 是n的欧拉函数值 int e; //{e, n}为公开密钥 int d; //{d, n}为秘密密钥 int clear[MAXLENGTH], Ciphertext[MAXLENGTH];//分别用于存放加//密前的明//文和加密后的密文int DecryptionText[MAXLENGTH];//存放解密后的明文 //////////////////////////////////////////////////////////// //以下为加密算法 void Encryption() {//加密算法 cout << " 请输入两个较大的素数:" ; cin >> p >> q ; cout << " p = " << p << ", q = " << q << endl; n = p * q;//求解 n, phi = (p - 1) * ( q - 1 );//求解 n 的欧拉函数值 cout << " n = " << n << ", phi = " << phi << endl; cout << " 请从[0," << phi - 1 << "]中选择一个与 " << phi << " 互素的数 e:"; cin >> e; float d0; for( int i = 1; ; i++) {///求解乘法逆元 e * d ≡ 1 (mod phi) d0 = (float)(phi*i+1) / e; if( d0 - (int)d0 == 0 ) break; } d = (int)d0; cout << endl; cout << " e = " << e << ", d = " << d << endl; cout << " 公开密钥 Pk = {e,n} = {" << e << "," << n << "}" << endl; cout << " 秘密密钥 Sk = {d,n} = {" << d << "," << n << "}" << endl; cout << endl;

(完整word版)电子系c语言程序设计加密解密

课程设计报告 课程设计名称: C语言程序设计 指导教师: 学生: 学号: 学院:电子信息工程学院 完成时间: 2011年9月27日 嘉应学院电子信息工程学院 1

C语言课程设计说明书 目录 1 需求分析 (1) 2总体设计 (2) 3详细设计 (3) 3.1 换位加密流程图 (3) 3.2 换位解密流程图 (4) 3.3 替代加密流程图 (5) 3.4 替代解密流程图 (6) 4调试与测试 (8) 5测试结果 (8) 6附录 (11) I

1 需求分析 问题描述(实验指导书中已经给出) ①数据的输入和输出;要求使用文件操作。文件(明文,仅限于英文字母)存放在某一已知文本文件中,加密后的文件(密文)存放在另一文件中。 ②换位加密和解密: 加密:根据密钥(即移位位数,用户从键盘输入)将对应字符进行移位操作,输出密文;解密:输入密文后再输入移位位数则可输出明文; ③凯撒加密和解密: 加密:根据密钥(即移位位数,用户从键盘输入)将对应字符进行移位操作,输出密文;解密:输入密文后再输入移位位数则可输出明文; ④统计单词的个数; ⑤退出。

2总体设计 (程序设计总流程图,可以画带流程线的流程图) 此处只需要写出一个流程图就可以了,就是总的那个流程图,请规范的画图。不需要分出2.1和2.2. 开始 welcome() caidan() transpen( ); transpde( ) caesaren( ) caesarde() mingwent miwentongji(byebye()

3详细设计 (各模块功能说明,如函数功能、入口及出口参数说明,函数调用关系描述等 这块大家问题最多了,这里不是写程序代码,而是写流程图里面各个主要函数的作用,函数之间关系的说明。 以第1题为例,此处应为: 3.1 换位加密流程图 流程图 (对流程图加以说明。可以把关键语句放在此处,加以注释说明) 建立mingwen.txt 和miwen.txt 文件 输入密钥n 输入明文到数组r k=strlen(r)j 计算数组r 长度 for i=0 to k 关闭并保存mingwen.txt 文件 打开mingwen.txt 文件 space(h,r) 将明文去空格并放到数组h 中 m=strlen(h) 计算数组h 长度 m%n==0 是 否 hang=m/n hang=m/n+1 j=0 for i=0 to hang for i=m to hang*n z=0 fputc(r[i],mingwen) 将明文存放到mingwen.txt 文件中 for j=0 to n h[i]='a'+j j++ for i=0 to hang zl[i][j]=h[z] z++ for j=o to n zl[i][j]=h[z] z++

RSA加密算法的基本原理

RSA加密算法的基本原理 1978年RSA加密算法是最常用的非对称加密算法,CFCA 在证书服务中离不了它。但是有不少新来的同事对它不太了解,恰好看到一本书中作者用实例对它进行了简化而生动的描述,使得高深的数学理论能够被容易地理解。我们经过整理和改写特别推荐给大家阅读,希望能够对时间紧张但是又想了解它的同事有所帮助。 RSA是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名。RSA以它的三个发明者Ron Rivest,Adi Shamir,Leonard Adleman的名字首字母命名,这个算法经受住了多年深入的密码分析,虽然密码分析者既不能证明也不能否定RSA的安全性,但这恰恰说明该算法有一定的可信性,目前它已经成为最流行的公开密钥算法。 RSA的安全基于大数分解的难度。其公钥和私钥是一对大素数(100到200位十进制数或更大)的函数。从一个公钥和密文恢复出明文的难度,等价于分解两个大素数之积(这是公认的数学难题)。 RSA的公钥、私钥的组成,以及加密、解密的公式可见于下表: 可能各位同事好久没有接触数学了,看了这些公式不免一头雾水。别急,在没有正式讲解RSA加密算法以前,让我们先复习一下数学上的几个基本概念,它们在后面的介绍中要用到: 一、什么是“素数”? 素数是这样的整数,它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积。例如,15=3*5,所以15不是素数;又如,12=6*2=4*3,所以12也不是素数。另一方面,13除了等于13*1以外,不能表示为其它任何两个整数的乘积,所以13是一个素数。素数也称为“质数”。 二、什么是“互质数”(或“互素数”)? 小学数学教材对互质数是这样定义的:“公约数只有1的两个数,叫做互质数。”这里所说的“两个数”是指自然数。 判别方法主要有以下几种(不限于此): (1)两个质数一定是互质数。例如,2与7、13与19。 (2)一个质数如果不能整除另一个合数,这两个数为互质数。例如,3与10、5与26。(3)1不是质数也不是合数,它和任何一个自然数在一起都是互质数。如1和9908。(4)相邻的两个自然数是互质数。如15与16。 (5)相邻的两个奇数是互质数。如49与51。 (6)大数是质数的两个数是互质数。如97与88。 (7)小数是质数,大数不是小数的倍数的两个数是互质数。如7和16。 (8)两个数都是合数(二数差又较大),小数所有的质因数,都不是大数的约数,这两个数是互质数。如357与715,357=3×7×17,而3、7和17都不是715的约数,

RSA加解密算法C语言的实现

#include #include #include #include #include #include #define MAX 100 #define LEN sizeof(struct slink) void sub(int a[MAX],int b[MAX] ,int c[MAX] ); struct slink { int bignum[MAX]; /*bignum[98]用来标记正负号,1正,0负bignum[99]来标记实际长度*/ struct slink *next; }; /*/--------------------------------------自己建立的大数运算库-------------------------------------*/ void print( int a[MAX] ) { int i; for(i=0;il2) return 1; if (l1=0;i--) { if (a1[i]>a2[i]) return 1 ; if (a1[i]

C语言实现文件的des加解密实例

C语言实现文件的des加解密实例 c语言中的正则 ,d3.js画矢量图+可拖拽的实现思路 DOM2级事件处理程序跨浏览器兼容事件 ,exel导入/导出和csv文件导入、导出 ,Go http访问使用代理 golang进行socket通讯 ,hessian+hibernate 懒加载处理 ,HTML+CSS代码橙色导航菜单html5 撞球游戏 // get 网络请求 func Get(api string,params .Values)(rs[]byte ,err error){ var *. ,err=.Parse(api) if err!=nil{ fmt.Printf("解析错误:\r\n%v",err) return nil,err } //如果参数中有中文参数,这个方法会进行Encode //iOS KVO注册和监听方法 //C语言websocket编程 .RawQuery=params.Encode() resp,err:=http.Get(.String()) if err!=nil{ fmt.Println("err:",err) return nil,err } defer resp.Body.Close() return ioutil.ReadAll(resp.Body) } // post 网络请求 ,params 是.Values类型 func Post(api string, params .Values)(rs[]byte,err error){ resp,err:=http.PostForm(api, params) if err!=nil{ return nil ,err } defer resp.Body.Close() return ioutil.ReadAll(resp.Body) } //代码描述:基于GO的黄金数据接口调用代码实例 //关联数据:黄金数据 //css之before and after [代码] [C#]代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using https://www.sodocs.net/doc/4612893802.html,;

密码学-RSA加密解密算法的实现课程设计报告

密码学课程报告《RSA加密解密算法》 专业:信息工程(信息安全) 班级:1132102 学号:201130210214 姓名:周林 指导老师:阳红星 时间:2014年1月10号

一、课程设计的目的 当前最著名、应用最广泛的公钥系统RSA是在1978年,由美国麻省理工学院(MIT)的Rivest、Shamir和Adleman在题为《获得数字签名和公开钥密码系统的方法》的论文中提出的。 RSA算法是第一个既能用于数据加密也能用于数字签名的算法,因此它为公用网络上信息的加密和鉴别提供了一种基本的方法。它通常是先生成一对RSA 密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册,人们用公钥加密文件发送给个人,个人就可以用私钥解密接受。为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。 公钥加密算法中使用最广的是RSA。RSA算法研制的最初理念与目标是努力使互联网安全可靠,旨在解决DES算法秘密密钥的利用公开信道传输分发的难题。而实际结果不但很好地解决了这个难题;还可利用RSA来完成对电文的数字签名以抗对电文的否认与抵赖;同时还可以利用数字签名较容易地发现攻击者对电文的非法篡改,以保护数据信息的完整性。此外,RSA加密系统还可应用于智能IC卡和网络安全产品。 二、RSA算法的编程思路 1.确定密钥的宽度。 2.随机选择两个不同的素数p与q,它们的宽度是密钥宽度的1/2。 3.计算出p和q的乘积n 。 4.在2和Φ(n)之间随机选择一个数e , e 必须和Φ(n)互素,整数e 用做加密密钥(其中Φ(n)=(p-1)*(q-1))。 5.从公式ed ≡ 1 mod Φ(n)中求出解密密钥d 。 6.得公钥(e ,n ), 私钥 (d , n) 。 7.公开公钥,但不公开私钥。 8.将明文P (假设P是一个小于n的整数)加密为密文C,计算方法为: C = Pe mod n 9.将密文C解密为明文P,计算方法为:P = Cd mod n 然而只根据n和e(不是p和q)要计算出d是不可能的。因此,任何人都可对明文进行加密,但只有授权用户(知道d)才可对密文解密 三、程序实现流程图: 1、密钥产生模块:

用实例讲解RSA加密算法(精)

可能各位同事好久没有接触数学了,看了这些公式不免一头雾水。别急,在没有正式讲解RSA加密算法以前,让我们先复习一下数学上的几个基本概念,它们在后面的介绍中要用到: 一、什么是“素数”? 素数是这样的整数,它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积。例如,15=3*5,所以15不是素数;又如,12=6*2=4*3,所以12也不是素数。另一方面,13除了等于13*1以外,不能表示为其它任何两个整数的乘积,所以13是一个素数。素数也称为“质数”。 二、什么是“互质数”(或“互素数”)? 小学数学教材对互质数是这样定义的:“公约数只有1的两个数,叫做互质数。”这里所说的“两个数”是指自然数。 判别方法主要有以下几种(不限于此): (1)两个质数一定是互质数。例如,2与7、13与19。 (2)一个质数如果不能整除另一个合数,这两个数为互质数。例如,3与10、5与26。(3)1不是质数也不是合数,它和任何一个自然数在一起都是互质数。如1和9908。(4)相邻的两个自然数是互质数。如15与16。 (5)相邻的两个奇数是互质数。如49与51。 (6)大数是质数的两个数是互质数。如97与88。 (7)小数是质数,大数不是小数的倍数的两个数是互质数。如7和16。 (8)两个数都是合数(二数差又较大),小数所有的质因数,都不是大数的约数,这两个数是互质数。如357与715,357=3×7×17,而3、7和17都不是715的约数,这两个数为互质数。等等。 三、什么是模指数运算? 指数运算谁都懂,不必说了,先说说模运算。模运算是整数运算,有一个整数m,以n 为模做模运算,即m mod n。怎样做呢?让m去被n整除,只取所得的余数作为结果,就

RSA加密解密

苏州科技学院 实验报告 实验四 学生姓名:学号:指导教师: 实验地点:计算机学院大楼东309 实验时间:4.21 一、实验室名称:软件实验室 二、实验项目名称:RSA加密解密 三、实验学时:4学时 四、实验原理: 加密过程: 第一步,用户首先输入两个素数p和q,并求出 n = p*q,然后再求出n的欧拉函数值phi。 第二步,在[e,phi]中选出一个与phi互素的整数e,并根据e*d ≡1(mod phi),求出e的乘法逆元。至此我们已经得到了公开密钥{e,n}和秘密密钥{d,n}。 第三步,让用户输入要进行加密的小于n一组正整数(个数不超过MAXLENGTH=500),输入以-1为结束标志,实际个数存入size中,正整数以clear[MAXLENGTH]保存。 第四步,对第三步所得的明文clear[MAXLENGTH]进行加密。遍历clear[size],对每一个整数用以下算法进行加密,并将加密后的密文保存在Ciphertext[MAXLENGTH]中。 注意:此处不能用m2[j] = clear[j] ^ e整数的幂,因为当e和clear[j]较大时,会发生溢出,至使出现无法预料的结果。 第五步,输出加密后的密文。

解密过程: 第一步,根据在以上算法中求出的解密密钥[d,phi],对加密后的密文Ciphertext[MAXLENGTH]进行解密,结果保存在DecryptionText[MAXLENGTH]中,算法如下: 第二步,输出对加密前的明文和加密并解密后的密文进行比较,判断两个数组是否一致,从而得知算法是否正确。 五、实验目的: 1、对算法描述可进行充分理解,精确理解算法的各个步骤。 2、完成RSA软件算法设计。 3、用C++完成算法的设计模块。 六、实验内容: 通过编写的程序完成RSA加密解密功能 七、实验器材(设备、元器件): (1)个人计算机 (2) Windows 7系统平台 (3) C++开发环境 八、实验数据及结果分析: #include #include

RSA加密算法及实现

数学文化课程报告题目:RSA公钥加密算法及实现

RSA公钥加密算法及实现 摘要 公钥密码是密码学界的一项重要发明,现代计算机与互联网中所使用的密码技术都得益于公钥密码。公钥密码是基于数学的上的困难问题来保证其性。其中RSA加密算法是一项重要的密码算法,RSA利用大整数的质数分解的困难性,从而保证了其相对安全性。但如果发现了一种快速进行质数分解的算法,则RSA算法便会失效。本文利用C 语言编程技术进行了RSA算法的演示[1]。 关键词:C语言编程、RSA算法、应用数学。

RSA public key encryption algorithm Abstract Public key cryptography is an important invention in cryptography, thanks to public key cryptography, and it is used in modern computer and Internet password technology. Public key cryptography is based on the mathematics difficult problem to ensure its confidentiality. The RSA public key encryption algorithm is an important cryptographic algorithm, RSA using the difficulty that large integer is hard to be factorized into prime Numbers to ensure it safety. But if you can find a kind of fast algorithm to do the factorization, RSA algorithm will be failure. In this paper we used C language programming technology to demonstrate the RSA algorithm. Keywords:C language programming、RSA algorithm、Applied mathematics

c语言课程设计-文件加密解密(含源代码)

C 语 言 课 程 设 计 实 验 报 告 实验名称:文件加密解密 院系:软件学院 学号: 日期:2012年9月3日—9月17日

一:设计题目 1:设计图形用户界面。 2:对文件进行加密并对加密文件进行保存。 3:对加密了的文件进行解密。 二:设计过程 设计过程中遇到的困难和解决方法: 1:不能很好地理解题意(通过老师的讲解)。 2:不知道如何设计加密解密程序(通过翻阅书籍和上网查找资料) 过程: 首先通过学习老师提供的资料了解大致的设计过程并懂得运用一些以前没有学习过的c语言。先利用文本文件设计出加密解密的主要过程并能运行。知道如何运用fopen将原文件打开并用fread将原文件内容读出来,然后进行加密设计并将加密的数据用fwrite写进指定的文件中并保存。然后读出加密的文件并解密并保存。最后在写出的程序中加入图形用户界面,运用window,box,gotoxy等进行设计。 三:源代码 #include /* 标准输入、输出函数 */ #include /* 标准库函数 */ #include //*字符串处理函数 */ #include /* 字符操作函数 */ #include #include #define key_down 80 #define key_up 72

#define key_esc 1 #define key_enter 28 #define SIZE 1 void box(int startx,int starty,int high,int width); int get_key(); char buf[20*20*4]; /*///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////加密解密 */ void fun(char *list,char *sd) /*加密过程*/ { FILE *fp1,*fp2; char buf[1000]; /*文件临时存放处*/ register int ch; fp1=fopen("e:\list.txt","r"); /*用可读方式打开文件*/ fp2=fopen("e:\sd.txt","w"); /*用可写方式创建一个文件*/ if(fp1==NULL) { printf("cannot open file\n"); exit(1); } if(fp2==NULL) { printf("cannot build file\n"); exit(1); } ch=fgetc(fp1); /*读出打开文件的光标处的一个字符*/ while(!feof(fp1)) /*读出的字符不是最后的字符*/ { ch=ch<<1; /*加密方法*/ fputc(ch,fp2); /*加密的字符存放在指定的地方*/ ch=fgetc(fp1); } rewind(fp2); /*将光标移动到第一个字符前面*/ fread(buf,sizeof(buf),1,fp2); /*从文件的当前位置开始中读取buf中存放的数据*/ printf("%s",buf); /*fclose(fp1); fclose(fp2); */ }

用实例给新手讲解RSA加密算法

RSA加密算法是最常用的非对称加密算法,CFCA在证书服务中离不了它。但是有不少新来的同事对它不太了解,恰好看到一本书中作者用实例对它进行了简化而生动的描述,使得高深的数学理论能够被容易地理解。我们经过整理和改写特别推荐给大家阅读,希望能够对时间紧张但是又想了解它的同事有所帮助。 RSA是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名。RSA以它的三个发明者Ron Rivest, Adi Shamir, Leonard Adleman的名字首字母命名,这个算法经受住了多年深入的密码分析,虽然密码分析者既不能证明也不能否定RSA的安全性,但这恰恰说明该算法有一定的可信性,目前它已经成为最流行的公开密钥算法。 RSA的安全基于大数分解的难度。其公钥和私钥是一对大素数(100到200位十进制数或更大)的函数。从一个公钥和密文恢复出明文的难度,等价于分解两个大素数之积(这是公认的数学难题)。 RSA的公钥、私钥的组成,以及加密、解密的公式可见于下表: 可能各位同事好久没有接触数学了,看了这些公式不免一头雾水。别急,在没有正式讲解RSA加密算法以前,让我们先复习一下数学上的几个基本概念,它们在后面的介绍中要用到: 一、什么是“素数”? 素数是这样的整数,它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积。例如,15=3*5,所以15不是素数;又如,12=6*2=4*3,所以12也不是素数。另一方面,13除了等于13*1以外,不能表示为其它任何两个整数的乘积,所以13是一个素数。素数也称为“质数”。 二、什么是“互质数”(或“互素数”)? 小学数学教材对互质数是这样定义的:“公约数只有1的两个数,叫做互质数。”这里所说的“两个数”是指自然数。 判别方法主要有以下几种(不限于此): (1)两个质数一定是互质数。例如,2与7、13与19。 (2)一个质数如果不能整除另一个合数,这两个数为互质数。例如,3与10、5与26。 (3)1不是质数也不是合数,它和任何一个自然数在一起都是互质数。如1和9908。 (4)相邻的两个自然数是互质数。如15与16。 (5)相邻的两个奇数是互质数。如49与51。 (6)大数是质数的两个数是互质数。如97与88。 (7)小数是质数,大数不是小数的倍数的两个数是互质数。如7和16。 (8)两个数都是合数(二数差又较大),小数所有的质因数,都不是大数的约数,这两个数是互质数。如357与715,357=3×7×17,而3、7和17都不是715的约数,这两个数为互质数。等等。 三、什么是模指数运算? 指数运算谁都懂,不必说了,先说说模运算。模运算是整数运算,有一个整数m,以n为模做模运算,即m mod n。怎样做呢?让m去被n整除,只取所得的余数作为结果,就叫做模运算。例如,10 mod 3=1; 26 mod 6=2;28 mod 2 =0等等。

使用C语言实现古典加密

实训一古典加密算法 一、实训目的 熟悉古典数据加密的工作原理,并且能够利用相关加密算法进行加解密。 二、实训环境 一台安装有Windows XP的计算机。 三、实训内容 用C编写程序实现对某一文件内容用恺撒加密法进行加密,然后用解密程序进行解密。 四、实训步骤 1、用C编写程序实现对某一文件内容用恺撒加密法进行加密。 2、用解密程序对密文进行解密。 五、实训效果检测 上交加密程序、解密程序、原文(.txt文档) 解:(1)使用的加密、解密程序代码如下: #include #include #include #include char encrypt(char ch,int n)/*加密函数,把字符向右循环移位n*/ { while(ch>='A'&&ch<='Z') { return ('A'+(ch-'A'+n)%26); } while(ch>='a'&&ch<='z') {

return ('a'+(ch-'a'+n)%26); } return ch; } void menu()/*菜单,1.加密,2.解密,3.暴力破解,密码只能是数字*/ { //clrscr(); printf("\n========================================================="); printf("\n1.Encrypt the file"); printf("\n2.Decrypt the file"); printf("\n3.Force decrypt file"); printf("\n4.Quit\n"); printf("=========================================================\n"); printf("Please select a item:"); return; } void main() { int i,n; char ch0,ch1; FILE *in,*out; char infile[20],outfile[20]; //textbackground(BLACK); //textcolor(LIGHTGREEN); //clrscr(); menu(); ch0=getch(); while(ch0!='4') { if(ch0=='1') { // clrscr(); printf("\nPlease input the infile:"); scanf("%s",infile);/*输入需要加密的文件名*/ if((in=fopen(infile,"r"))==NULL) { printf("Can not open the infile!\n"); printf("Press any key to exit!\n"); getch();

相关主题