搜档网
当前位置:搜档网 › 加密与解密:一个简单的C语言示例

加密与解密:一个简单的C语言示例

加密与解密:一个简单的C语言示例
加密与解密:一个简单的C语言示例

加密与解密:一个简单的C语言示例

写在前面

做大一年级的导生,碰巧一个同学问了一个C语言程序设计的题目。说是怎么都弄不对。我看了看,正好也是三年前我碰到的题目,仿佛还噙着旧日时光的泪痕。特此将题目与我的解法奉上,以祭奠那段逝去的时光。1.问题是什么?(1)使用要求的方法加密(容易)

(2)如何去解密用以上方法加密过的内容(需要一点观察力)2.加密程序没什么好说的,直接按部就班来做就可以了,上程序:#include#includechar* encode(char code[]); //Define a function for encoding processint main() { char prim[100],*code; printf('Please input the words which needs to be encoded:\t'); gets(prim); code = encode(prim); printf('The encoded words are:\t%s\n',code); return 0;}char* encode(char prim[]) { int

i,n,len; char code[100]; char temp_char,trans_char; int

temp_num,trans_num; len = strlen(prim); for(i = 0;i //Consider about the corresponding number of character if (temp_char 'z'

&& temp_char >= 'a') temp_num = temp_char - 'a' + 1; else if (temp_char 'Z' && temp_char >= 'A') temp_num = temp_char - 'A' + 27; trans_num = temp_num*3 % 52; if (trans_num > 26

&& trans_num 52) //Transform number to character trans_char = 'A' + trans_num - 27; else if (trans_num > 0 && trans_num 26) trans_char = 'a' + trans_num - 1; code[i] = trans_char; } code[len] = '\0'; return

code;}1234567891011121314151617181920212223242526272 82930313233343536373839简单测试一下:如果输入“iloveu”,结果会是什么呢?

3.解密程序不错,加密固然好做,因为它是一种正向的映射过程。我们知道,对于如函数y = f(x) 而言,给定x自变量,y这一因变量也随之改变。但是给定了y,我们能立即知道x 取值吗?我们甚至很难说x是唯一的,甚至是存在的。而这一难题,也是解密过程所必须面对的。

好在针对这一简单的问题,解密映射也是唯一的,只不过需要稍稍转个弯子。

好吧,先上程序:#include#includechar* decode(char code[]); //Define a function for decoding processint main() { char

*prim,code[100]; printf('Please input the words which needs to be decoded:\t'); gets(code); prim = decode(code); printf('The primitive words are:\t%s\n',prim); return 0;}char* decode(char code[]) { int i,n,len; char prim[100]; char temp_char,trans_char; int temp_num,trans_num; len = strlen(code); for(i = 0;i

//Consider about the corresponding digit of character if

(temp_char 'z' && temp_char >= 'a') temp_num = temp_char - 'a' + 1; else if (temp_char 'Z' && temp_char >= 'A') temp_num = temp_char - 'A' + 27; n = temp_num % 3; //Mode 3 and compute primitive number switch(n) { case 0: trans_num = temp_num/3; break; case 1: trans_num = 35 + temp_num/3; break; case 2: trans_num = 18 + temp_num/3; break; default: break; } //Transform number to character if (trans_num > 26

&& trans_num 52) trans_char = 'A' + trans_num - 27; else if (trans_num > 0 && trans_num 26) trans_char = 'a' + trans_num - 1; prim[i] = trans_char; } prim[len] = '\0'; return

prim;}1234567891011121314151617181920212223242526272 8293031323334353637383940414243444546474849505152用方才得到的加密内容去测试一下,看看解密程序是否工作良好?

看来没什么问题。

那么在这个解密环节里,我们做的最关键的分析是什么呢?首先,是确定解密映射具有唯一性,即对于一个字符,它的明文必须唯一,这对于所有加解密过程都是通用的(但我们在设计时必须有这样的忧虑);

第二,模数求余的性质非常关键,应用也十分广泛,尤其是在公钥加密中最早的算法几乎都是以“钟算”(模n求余)

形式实现的(关于公钥加密的算法分析,以后想起来的话会在博客里跟大家分享和讨论的)。后话

我记得我的网络软件设计老师说:不是去写程序,而是设计程序;编程到深处,与写文章并无二异。

这句话可能不一定对,却引导我走上了计算机科学学习的道路。万卷归宗,百川到海。我们在不同领域所探索的不同谜题,也许都有着同样的谜底

致谢:感谢你的阅读,风云际会,即是有缘。祝一路顺风!

DES算法及其程序实现

DES算法及其程序实现 一.D ES算法概述 ①DES算法为密码体制中的对称密码体制,又被成为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。明文按64位进行分组,密钥长64位,密钥事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位,使得每个密钥都有奇数个1)分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。 ②DES算法的特点:分组比较短、密钥太短、密码生命周期短、运算速度较慢。 ③DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位,整个算法的主流程图如下: 二.D ES算法的编程实现 #include #include using namespace std;

const static char ip[] = { //IP置换 58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4, 62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8, 57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3, 61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7 }; const static char fp[] = { //最终置换 40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23, 63, 31, 38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45, 13, 53, 21, 61, 29, 36, 4, 44, 12, 52, 20, 60, 28, 35, 3, 43, 11, 51, 19, 59, 27, 34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9, 49, 17, 57, 25 }; const static char sbox[8][64] = { //s_box /* S1 */ 14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7, 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8, 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0, 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13, /* S2 */ 15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10, 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5, 0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15, 13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9, /* S3 */ 10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8, 13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1, 13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7, 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12, /* S4 */ 7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15, 13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9, 10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4, 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14,

DES加密算法实验报告

苏州科技学院 实验报告 学生姓名:杨刘涛学号:1220126117 指导教师:陶滔 刘学书1220126114 实验地点:计算机学院大楼东309 实验时间:2015-04-20 一、实验室名称:软件实验室 二、实验项目名称:DES加解密算法实现 三、实验学时:4学时 四、实验原理: DES算法由加密、子密钥和解密的生成三部分组成。现将DES算法介绍如下。1.加密 DES算法处理的数据对象是一组64比特的明文串。设该明文串为m=m1m2…m64 (mi=0或1)。明文串经过64比特的密钥K来加密,最后生成长度为64比特的密文E。其加密过程图示如下:

图2-1:DES算法加密过程 对DES算法加密过程图示的说明如下: 待加密的64比特明文串m,经过IP置换(初始置换)后,得到的比特串的下标列表如下: 表2-1:得到的比特串的下标列表

该比特串被分为32位的L0和32位的R0两部分。R0子密钥K1(子密钥的生成将在后面讲)经过变换f(R0,K1)(f变换将在下面讲)输出32位的比特串 f1,f1与L0做不进位的二进制加法运算。运算规则为: f1与L0做不进位的二进制加法运算后的结果赋给R1,R0则原封不动的赋给L1。L1与R0又做与以上完全相同的运算,生成L2,R2……一共经过16次运算。最后生成R16和L16。其中R16为L15与f(R15,K16)做不进位二进制加法运算的结果,L16是R15的直接赋值。 R16与L16合并成64位的比特串。值得注意的是R16一定要排在L16前面。R16与L16合并后成的比特串,经过置换IP-1(终结置换)后所得比特串的下标列表如下: 表2-2:置换后所得比特串的下标列表 经过置换IP-1后生成的比特串就是密文e。 变换f(Ri-1,Ki): 它的功能是将32比特的输入再转化为32比特的输出。其过程如图2-2所示:

DES加密算法

数据加密标准DES(Data Encryption Standard)算法是由美国IBM公司研制的一种分组密码算法,一种迭代分组密码。 DES是一种使用最为广泛的加密算法,虽然DES出现后又产生了许多常规加密算法,但DES仍是此类算法中最重要的一种。 在正式讨论DES算法之前,为了更好的理解算法的实际工作过程,我们先来看一个简化的DES算法,以此加深对DES算法的理解。 一、简化的DES加密算法 简化的DES加密算法是以8bit的明文分组和10bit密钥作为输入,产生8bit 密文分组作为输出。 1、加密流程 简化的DES算法基本加密流程如图6.9所示 图6.9 简化的DES的加密过程

2、加密算法构成: 函数、SW置换函简单DES的加密算法包括4个基本函数:初始置换函数IP、f k 数、逆置换函数IP-1。 (1)初始置换函数IP 初始置换IP是将明文中数据的排列顺序按一定的规则重新排列,而生成新的数据序列的过程。如图6.10所示: 8bit原数据位置 1 2 3 4 5 6 7 8 【IP置换】 经IP置换后的数据位置 2 6 3 1 4 8 5 7 图6.10 简单DES的初始置换 例:设8bit数据为11110011 ,则初始置换后的结果为: 函数f k函数是多个置换函数和替代函数的组合函数。f k函数首先将输(2) f k 入它的8bit数据进行分组,分成左4位和右4位,然后对右组的4位数据进行E/P扩展置换运算,接着将扩展置换所得的8bit数据与子密钥进行异或运算,再将异或运算所得结果通过S盒输出,再将通过S盒输出的数据进行P4置换,最后将经过P4置换后的数据与输入f 函数经分组的左4位数据进行异或运算。 k F(R,SK)函数是f k函数的核心函数,其中SK是子密钥。F(R,SK)函数的运算方法如下:f k(L,R)=(L⊕F(R,SK),R)L:输入的左边4位分组 R:输入的右边4位分组⊕:逐位异或 ①扩展/置换是将4bit输入数据经过置换和扩展而产生8bit数据的算法。 如图6.11所示: E/P扩展置换前 1 2 3 4 E/P扩展置换 E/P扩展置换后 4 1 2 3 2 3 4 1

C语言实现DES算法实验报告分析

xx工程大学 实验报告 (2015-2016学年第一学期)报告题目:DES加密算法 课程名称:密码学B 任课教员: 专业: 学号: 姓名: 二O一六年一月十八日

一、课程概述 目的:培养学员的编程能力,理解算法原理。 要求:给出DES算法的软件实现,测试DES的加密速度。 二、设计思路 使用C++语言进行编程,简化了输入输出语句。预处理时加入了iostream包。使用了std名字空间。 加密时程序输入的明文是8个ascii码,生成一个16个16进制数的密文。 脱密时程序输入的密文是16个16进制数,生成一个8个ascii码的明文。 加脱密所用密钥均由16个16进制数组成。 其中16进制数全部使用大写字母。 程序中大量使用了的布尔数组,一个bool型变量只占用一位存储空间,比int型、char型变量要小的多。这降低了程序的空间复杂度。 三、采取的方案 本程序是将一个由8个ascii码组成的明文分组加密,生成一个由16个16进制数组成的密文。或将一个由16个16进制数组成的密文进行脱密,生成一个由8个ascii 码组成的明文。所用密钥由16个16进制数组成。 本实验按照输入数据及初始置换、16圈迭代、子密钥生成和逆初始置换及输出数据四个步骤实现加密算法设计。 1、输入数据及初始置换 本程序首先会提示用户输入加密脱密识别码,加密输入1,脱密输入0,将此识别码存入整形变量o。根据o的不同值,提示用户输入8个字符(加密)或16个16进制

数(脱密)。输入的明文或密文转化为二进制数后储存到布尔型数组m[65]中。 初始置换通过函数IP 完成,函数输入为原始明文m ,函数将输出结果保存到布尔型数组mip[65]中。函数思想为查表,含有一个整形变量数组ip[64],保存初始变换表IP 。将mip 的第i 位赋值为m 的第ip[i]位。 2、子密钥生成 输入16个16进制数的密钥后,将密钥保存在一个16位字符数组c 中,通过ToEr 函数将之变为二进制数。ToEr 函数输入为字符数组,通过switch 语句逐个检查字符数组的每一位,将对应的四位二进制数存在64位布尔数组k 中。 64 bit 密钥去掉每个字节的最高位得到56 bit 密钥输入,通过置换选择1变换得到 0C 和0D 各28 bit ,通过Zhihuan_1函数实现置换选择一。Zhihuan_1函数输入为二进制密钥数组k[64],输出为C0和D0,将C0、D0分别储存在28位布尔数组C 、D 中。函数采用查表方式生成C0和D0。 根据迭代的轮数确定C 和D 移位循环的位数,主程序中利用一个16位整形数组来存放每一次循环左移的位数。循环左移通过XunHuan 函数实现,函数输入为循环位数和长度为28的布尔数组(C 或者D ),函数运行一次只能改变一个布尔数组的值。为了减低编程复杂度,程序使用串行方法,分两次进行C 、D 的移位。 每完成一次C 和D 的移位,进行一次置换选择二。置换选择二利用zhihuan_2函数完成。思想和Zhihuan_1函数类似。zhihuan_2函数输入为移位后的C 、D ,zhihuan_2函数将圈子密钥存放在16*48的二维布尔数组kk[17][49] 中。kk[i][48]表示第i 圈的圈子密钥。原理图如图1所示。 脱密(o=0时)需要将圈子密钥交换,此时可利用kk[0][49]充当中间变量,无需定义新的变量减少了系统开销。

DES加密与解密C实现+实验报告

DES加密与解密算法 课程名称:工程实践 学生姓名: xxxx 学生学号: xxxx 专业班级: xxxx 任课教师: xxxx 论文提交日期: xxxx

DES加密与解密算法 摘要 本世纪五十年代以来,密码学研究领域出现了最具代表性的两大成就。其中之一就是1971年美国学者塔奇曼(Tuchman)和麦耶(Meyer)根据信息论创始人香农(Shannon)提出的“多重加密有效性理论”创立的,后于1977年由美国国家标准局颁布的数据加密标准。 DES密码实际上是Lucifer密码的进一步发展。它是一种采用传统加密方法的区组密码。它的算法是对称的,既可用于加密又可用于解密。 1977年1月,美国政府颁布:采纳IBM公司设计的方案作为非机密数据的正式数据加密标准(DES枣Data Encryption Standard)。 目前在这里,随着三金工程尤其是金卡工程的启动,DES算法在POS、ATM、磁卡及智能卡(IC卡)、加油站、高速公路收费站等领域被广泛应用,以此来实现关键数据的保密,如信用卡持卡人的PIN的加密传输,IC卡与POS间的双向认证、金融交易数据包的MAC校验等,均用到DES算法。 关键词:DES算法,加密,解密

Abstract This century since fifty time, cryptography research field is the most representative of the two Achievement. One was the 1971 USA scholar Tuchman (Tuchman) and Meyer (Meyer) based on information theory founder Shannon (Shannon) proposed "multiple encryption effectiveness theory" was founded, in 1977 after the National Bureau of standards promulgated by the America data encryption standard.The DES password is actually a further development of the Lucifer password. It is a traditional encryption method of block cipher. The algorithm is symmetric, which can be used for encryption and decryption can be used. In 1977 January, the government promulgated American: adopted IBM design as a non official data confidential data encryption standard (DES - Data Encryption Standard). At present here, along with three gold project especially golden card project startup, DES algorithm in POS, ATM, magnetic card and intelligent card (IC card), gas station, highway toll station and other fields are widely used, so as to realize the security of key data encryption transmission, such as credit card holders PIN, IC card and POS mutual authentication, financial transaction data package of MAC check and so on, are used in DES algorithm. Keywords: DES algorithm, encryption, decryption

C语言实现DES算法实验报告

XX工程大学 实验报告 (2015-2016学年第一学期)报告题目:DES 加密算法______________ 课程名称: _____________ 密码学B ________________ 任课教员: _______________________________________ 专业: __________________________________________ 学号: __________________________________________ 姓名: __________________________________________

O一六年一月十八日 '、课程概述 目的:培养学员的编程能力,理解算法原理 要求:给出DES算法的软件实现,测试DES勺加密速度。 二、设计思路 使用C++语言进行编程,简化了输入输出语句。预处理时加入了iostream包。使用了std 名字空间。 加密时程序输入的明文是8个ascii码,生成一个16个16进制数的密文。 脱密时程序输入的密文是16个16进制数,生成一个8个ascii码的明文。 加脱密所用密钥均由16个16进制数组成。 其中16进制数全部使用大写字母。 程序中大量使用了的布尔数组,一个bool型变量只占用一位存储空间,比int型、char 型变量要小的多。这降低了程序的空间复杂度。 三、采取的方案 本程序是将一个由8个ascii码组成的明文分组加密,生成一个由16个16进制数组成的密文。或将一个由16个16进制数组成的密文进行脱密,生成一个由 8个ascii 码组成的明文。所用密钥由16个16进制数组成。 本实验按照输入数据及初始置换、16圈迭代、子密钥生成和逆初始置换及输出数据 四个步骤实现加密算法设计。 1、输入数据及初始置换 本程序首先会提示用户输入加密脱密识别码,加密输入 1,脱密输入0,将此识别码存入整形变量0。根据o的不同值,提示用户输入8个字符(加密)或16个16进制数(脱密)。输入的明文或密文转化为二进制数后储存到布尔型数组 m[65]中。 初始置换通过函数IP完成,函数输入为原始明文 m函数将输出结果保存到布尔型数组mip[65]中。函数思想为查表,含有一个整形变量数组ip[64],保存初始变换表IP。将mip 的第i位赋值为m的第ip[i]位。

des加密算法c语言源代码

#include int IP[64] = { 58,50,42,34,26,18,10,2, 60,52,44,36,28,20,12,4, 62,54,46,38,30,22,14,6, 64,56,48,40,32,24,16,8, 57,49,41,33,25,17,9,1, 59,51,43,35,27,19,11,3, 61,53,45,37,29,21,13,5, 63,55,47,39,31,23,15,7 }; int IP_1[64] = { 40,8,48,16,56,24,64,32, 39,7,47,15,55,23,63,31, 38,6,46,14,54,22,62,30, 37,5,45,13,53,21,61,29, 36,4,44,12,52,20,60,28, 35,3,43,11,51,19,59,27, 34,2,42,10,50,18,58,26, 33,1,41,9,49,17,57,25 }; int E[48] = { 32,1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9, 10,11,12,13, 12,13,14,15,16,17, 16,17,18,19,20,21, 20,21,22,23,24,25, 24,25,26,27,28,29, 28,29,30,31,32,1 }; int P[32]={16 ,7 , 20 , 21 , 29,12 ,28 , 17 , 1, 15 ,23 , 26 , 5, 18 ,31 , 10 , 2, 8 , 24 , 14 , 32,27, 3 , 9 , 19,13, 30 , 6 , 22,11 ,4 , 25 };

DES加密解密C++

#include #include #include void show1() //主界面 { printf("\n\n\n\t\t*************** DES加密解密系统******************\n\n"); printf("\t\t--------------------------------------------------\n"); //printf("\t\t--------------------------------------------------\n"); printf("\t\t**************************************************\n"); printf("\t\t**\t\t\t\t\t\t**\n"); printf("\t\t**\t\t\t\t\t\t**\n"); printf("\t\t**\t\t\t1.加密\t\t\t**\n"); printf("\t\t**\t\t\t\t\t\t**\n"); printf("\t\t**\t\t\t2.解密\t\t\t**\n"); printf("\t\t**\t\t\t\t\t\t**\n"); printf("\t\t**\t\t\t3.退出\t\t\t**\n"); printf("\t\t**\t\t\t\t\t\t**\n"); printf("\t\t**\t\t\t\t\t\t**\n"); printf("\t\t--------------------------------------------------\n"); } void show2() //加密界面 { printf("\n\n\n\t\t****************** DES加密**********************\n\n"); printf("\t\t--------------------------------------------------\n"); printf("\t\t**************************************************\n"); printf("\t\t**\t\t\t\t\t\t**\n"); printf("\t\t**\t请选择明文和密钥的输入方式:\t\t**\n"); printf("\t\t**\t\t\t\t\t\t**\n"); printf("\t\t**\t\t1.直接输入\t\t\t**\n"); printf("\t\t**\t\t\t\t\t\t**\n"); printf("\t\t**\t\t2.从文件读取\t\t\t**\n"); printf("\t\t**\t\t\t\t\t\t**\n"); printf("\t\t**\t\t3.退出\t\t\t\t**\n"); printf("\t\t**\t\t\t\t\t\t**\n"); printf("\t\t--------------------------------------------------\n"); printf("\t\t\t选择:"); } void reader(char str[30],char s[8]) //读取明文和密钥 { FILE *fp;

DES加密算法的实现(详细版)

v 3DES加密算法的实现毕业论文 一、DES加密及解密算法程序源代码: #include using namespace std; const static char IP_Table[] = { //IP_Table置换58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4, 62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8, 57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3, 61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7 }; const static char Final_Table[] = { //最终置换40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23, 63, 31, 38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45, 13, 53, 21, 61, 29, 36, 4, 44, 12, 52, 20, 60, 28, 35, 3, 43, 11, 51, 19, 59, 27, 34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9, 49, 17, 57, 25 }; const static char S_Box[8][64] = { //s_box /* S1 */ {14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7, 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8, 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0, 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13}, /* S2 */ {15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10, 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5, 0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15, 13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9}, /* S3 */ {10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8, 13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1, 13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7,

DES加密算法代码

实验二 DES加密算法 用C语言编写DES算法代码,代码如下: #include <> #include <> //明文IP置换坐标 int DataIP[] = {58,50,42,34,26,18,10,2, 60,52,44,36,28,20,12,4, 62,54,46,38,30,22,14,6, 64,56,48,40,32,24,16,8, 57,49,41,33,25,17,9,1, 59,51,43,35,27,19,11,3, 61,53,45,37,29,21,13,5, 63,55,47,39,31,23,15,7}; char preData[8]; //用户输入的明文 char preKey[8]; //用户输入的密钥 int Data64[64]; //8个明文通过十进制转二进制得到的64bit明文 int Key64[64]; //8个密钥通过十进制转二进制得到的64bit密钥 int DataTemp[64]; //Data64[]通过IP置换得到的64bit明文,用于得

到L0和R0 int L0[32],R0[32]; int flagDorK=0; //标志位,如果是1的时候表示明文,是0的时候表示密文 //此段全局变量服务于段雪琦所写所用函数 //PC_1置换坐标表 int PC_1[56] = {57,49,41,33,25,17,9, 1,58,50,42,34,26,18, 10,2,59,51,43,35,27, 19,11,3,60,52,44,36, 63,55,47,39,31,23,15, 7,62,54,46,38,30,22, 14,6,61,53,45,37,29, 21,13,5,28,20,12,4}; //PC_2置换坐标表 int PC_2[48] = {14,17,11,24,1,5, 3,28,15,6,21,10, 23,19,12,4,26,8, 16,7,27,20,13,2, 41,52,31,37,47,55,

DES加密算法C语言 实验报告

DES实验报告 一、实验目的 实现DES算法。 二、实验过程 按照DES的算法流程设计,具体实施详见附件。 三、使用方法 首先输入密钥,八位ASCII长,否则报错。然后输入读入文件名和写入文件名,必须以ASCII编码,否则不能使用。 四、实验结果 将自身cpp文件进行加密解密,前后文件完全一样。见文件 附录 源代码: // 滴一欸死.cpp : 定义控制台应用程序的入口点。 // #include"stdafx.h" #include #include #include #include #include #include"table.h" /* Constant */ #define ENCRYPT_LENGTH8 //length of each unit in encryption #define DECIPHER_LENGTH 4 //length of each unit in decipher #define MAX320xFFFFFFFF //mask of 32 bits /* Declaration */ typedefunsignedlonglong bit64; typedefunsignedlonglong bit56; typedefunsignedlonglong bit48; typedefunsignedint bit32; typedefunsignedint bit28; /* File stream */ FILE *fin, *fout; /* For debug */ inlinevoid printBite(bit64num) { while (num)

DES算法(基于C语言,加密解密代码)

/* Note:Your choice is C IDE */ #include"stdio.h" #include"string.h" #define uchar unsigned char /**************************************************************************** ******************************明文转换声明部分*******************************/ //IP1置换表 int IP_1[64]={58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4, 62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8, 57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3, 61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7}; //IP2逆置换表 int IP_2[64]={40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23, 63, 31, 38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45, 13, 53, 21, 61, 29,

36, 4, 44, 12, 52, 20, 60, 28, 35, 3, 43, 11, 51, 19, 59, 27, 34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9, 49, 17, 57, 25}; //E扩展置换表 int E_case[48]={32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9, 10, 11, 12, 13, 12, 13, 14, 15, 16, 17, 16, 17, 18, 19, 20, 21, 20, 21, 22, 23, 24, 25, 24, 25, 26, 27, 28, 29, 28, 29, 30, 31, 32, 1}; //S盒压缩 int S1[4][16]={14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7, 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8, 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0, 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13}; int S2[4][16]={15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10, 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5, 0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15,

用C语言实现DES加密与解密

用C语言实现DES加密与解密 #include int IP[64] = { 58,50,42,34,26,18,10,2, 60,52,44,36,28,20,12,4, 62,54,46,38,30,22,14,6, 64,56,48,40,32,24,16,8, 57,49,41,33,25,17,9,1, 59,51,43,35,27,19,11,3, 61,53,45,37,29,21,13,5, 63,55,47,39,31,23,15,7 }; int IP_1[64] = { 40,8,48,16,56,24,64,32, 39,7,47,15,55,23,63,31, 38,6,46,14,54,22,62,30, 37,5,45,13,53,21,61,29, 36,4,44,12,52,20,60,28, 35,3,43,11,51,19,59,27, 34,2,42,10,50,18,58,26, 33,1,41,9,49,17,57,25 }; int E[48] = { 32,1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9, 10,11,12,13, 12,13,14,15,16,17, 16,17,18,19,20,21, 20,21,22,23,24,25, 24,25,26,27,28,29, 28,29,30,31,32,1 }; int P[32]={16 ,7 , 20 , 21 , 29,12 ,28 , 17 , 1, 15 ,23 , 26 , 5, 18 ,31 , 10 , 2, 8 , 24 , 14 , 32,27, 3 , 9 , 19,13, 30 , 6 , 22,11 ,4 , 25 }; 19,11,3,60,52,44,36, 63,55,47,39,31,23,15,

DES加密算法的C语言实现

实验报告 姓名:班级:学号: 试验名称:DES加密算法实现 实验环境:VC++6.0 试验原理: DES 使用一个56 位的密钥以及附加的8 位奇偶校验位,产生最大64 位的分组大小。这是一个迭代的分组密码,使用称为Feistel 的技术,其中将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。DES 使用16 个循环,使用异或,置换,代换,移位操作四种基本运算。 算法流程设计: 数据结构: #define PLAIN_FILE_OPEN_ERROR -1 #define CIPHER_FILE_OPEN_ERROR -2 #define OK 1 //初始置换表IP

int IP_Table[64] = { 57,49,41,33,25,17,9,1, 59,51,43,35,27,19,11,3, 61,53,45,37,29,21,13,5, 63,55,47,39,31,23,15,7, 56,48,40,32,24,16,8,0, 58,50,42,34,26,18,10,2, 60,52,44,36,28,20,12,4, 62,54,46,38,30,22,14,6}; //逆初始置换表IP^-1 int IP_1_Table[64] = {39,7,47,15,55,23,63,31, 38,6,46,14,54,22,62,30, 37,5,45,13,53,21,61,29, 36,4,44,12,52,20,60,28, 35,3,43,11,51,19,59,27, 34,2,42,10,50,18,58,26, 33,1,41,9,49,17,57,25, 32,0,40,8,48,16,56,24}; //扩充置换表E int E_Table[48] = {31, 0, 1, 2, 3, 4, 3, 4, 5, 6, 7, 8, 7, 8,9,10,11,12, 11,12,13,14,15,16, 15,16,17,18,19,20, 19,20,21,22,23,24, 23,24,25,26,27,28, 27,28,29,30,31, 0}; //置换函数P int P_Table[32] = {15,6,19,20,28,11,27,16, 0,14,22,25,4,17,30,9, 1,7,23,13,31,26,2,8, 18,12,29,5,21,10,3,24}; //S盒 int S[8][4][16] =//S1 {{{14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7}, {0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8},

相关主题