-
2021-05-24 00:42:28
替代密码和置换密码的C语言实现剖析
实验一
一、实验名称:替代密码和置换密码的实现
二、实验目的:通过编程实现替代密码算法和置换密码算法,加深对古典密码体系的了解,为以后深入学习密码学奠定基础。
三、实验内容:
A:替代密码
1、实验原理:使用替代法进行加密,将明文中的字符用其他字符替代后形成密文。最早的替代密码是由Julius Caesar 发明的Caesar (恺撒)密码,又叫循环移位密码。它的加密过程可表示为: E(m) = (m+k ) mod n
其中,m为明文字母在字母表中的位置数;n为字母表中的字母个数;k为密钥;E(m)为密文字母在字母表中对应的位置数。
解密算法是:m = D(L) =(L-k)mod 26;
2、算法设计:使用两个函数分别进行加密和解密的过程,在主程序中通过选择加密还是解密来调用不同函数进行替代密码的加密和解密过程实现;
3、函数接口:
加密:int encrypt()
{
printf("输入明文:\n");
scanf("%s",a);
for(i=0;a[i]!='\0';i++)
{
b[i]=a[i]-64;
}
printf("输入一位密钥\n");
scanf("%d",&k);
printf("\n");
for(i=0;b[i]!='\0';i++)
{
m[i]=(b[i]+k)%26+64;
}
printf("%s",&m);
return 0;
}
解密:int decode()
{
printf("输入密文:\n");
更多相关内容 -
替代密码和置换密码的C语言实现
2021-05-23 02:37:28《替代密码和置换密码的C语言实现》由会员分享,可在线阅读,更多相关《替代密码和置换密码的C语言实现(13页珍藏版)》请在人人文库网上搜索。1、实验一一、实验名称:替代密码和置换密码的实现二、实验目的:通过...《替代密码和置换密码的C语言实现》由会员分享,可在线阅读,更多相关《替代密码和置换密码的C语言实现(13页珍藏版)》请在人人文库网上搜索。
1、实验一一、实验名称:替代密码和置换密码的实现二、实验目的:通过编程实现替代密码算法和置换密码算法,加深对古典密码体系的了解,为以后深入学习密码学奠定基础。三、实验内容:A:替代密码1、实验原理:使用替代法进行加密,将明文中的字符用其他字符替代后形成密文。最早的替代密码是由Julius Caesar 发明的Caesar (恺撒)密码,又叫循环移位密码。它的加密过程可表示为: E(m) = (m+k ) mod n其中,m为明文字母在字母表中的位置数;n为字母表中的字母个数;k为密钥;E(m)为密文字母在字母表中对应的位置数。解密算法是:m = D(L) =(L-k)mod 26;2、算法设计:使。
2、用两个函数分别进行加密和解密的过程,在主程序中通过选择加密还是解密来调用不同函数进行替代密码的加密和解密过程实现;3、函数接口:加密:int encrypt()printf(输入明文:n);scanf(%s,a);for(i=0;ai!=0;i+)bi=ai-64;printf(输入一位密钥n);scanf(%d,&k);printf(n);for(i=0;bi!=0;i+)mi=(bi+k)%26+64;printf(%s,&m);return 0;解密:int decode()printf(输入密文:n);scanf(%s,a);for(i=0;ai!=0;i+)bi=ai-64;prin。
3、tf(输入一位密钥n);scanf(%d,&k);printf(n);for(i=0;bi!=0;i+)ni=(bi-k)%26+64;printf(%s,n);return 0;4、 程序流程图:5、 测试结果截图:加密:解密:B:1、 实验原理:不改变明文字符,但是把字符在明文中的排列顺序改变,来实现明文信息的加密。置换密码也被称为换位密码。本次实验使用的是矩阵换位法,是将明文中的字母按照给定的顺序安排在一个矩阵中,然后又根据密钥提供的顺序重新组合矩阵中的字母,从而形成密文。解密过程是根据密钥的字母数作为列数,将密文按照列、行的顺序写出,再根据由密钥给出的矩阵置换产生新的矩阵恢复正常顺序,。
4、从而恢复明文。2、算法设计:通过选择加密或解密,使用置换矩阵顺序和恢复矩阵顺序的两个函数,分别在主函数中进行调用来实现置换密码的加密解密实现;3、函数接口:加密:int jiami()int i = 0, j = 0, key_len = 0, text_len = 0, row = 0;char keyLENGTH = 0 ;char numberLENGTH = 0 ;char ptextLENGTH * 10 = 0 ;char ctextLENGTH * 10 = 0 ;printf(输入明文:n);scanf(%s, ptext);i = 0;while (ptexti != 0)t。
5、ext_len+;i+;printf(输入密钥:n);scanf(%s, key);i = 0;while (keyi != 0)key_len+;i+;for (i = 0; i#include #includeint k,i=0;char a100;char b100,m100,n100;int encrypt()printf(输入明文:n);scanf(%s,a);for(i=0;ai!=0;i+)bi=ai-64;printf(输入一位密钥n);scanf(%d,&k);printf(n);for(i=0;bi!=0;i+)mi=(bi+k)%26+64;printf(%s,&m);r。
6、eturn 0;int decode()printf(输入密文:n);scanf(%s,a);for(i=0;ai!=0;i+)bi=ai-64;printf(输入一位密钥n);scanf(%d,&k);printf(n);for(i=0;bi!=0;i+)ni=(bi-k)%26+64;printf(%s,n);return 0;int main()int c;printf(加密选择1,解密选择2 n);scanf(%d,&c);if(c=1)encrypt();if(c=2)decode();return 0;B、置换密码:#include #include #define LENGTH 。
7、26int jiami()int i = 0, j = 0, key_len = 0, text_len = 0, row = 0;char keyLENGTH = 0 ;char numberLENGTH = 0 ;char ptextLENGTH * 10 = 0 ;char ctextLENGTH * 10 = 0 ;printf(输入明文:n);scanf(%s, ptext);i = 0;while (ptexti != 0)text_len+;i+;printf(输入密钥:n);scanf(%s, key);i = 0;while (keyi != 0)key_len+;i+;fo。
8、r (i = 0; ikey_len; i+)numberi = 0;for (j = 0; jkey_len; j+)if (keyjkeyi)numberi+;for (i = 0; ikey_len; i+)for (j = i + 1; jkey_len; j+)if (keyj = keyi)numberj+;if (text_len%key_len = 0)row = text_len / key_len;elserow = text_len / key_len + 1;for (i = 0; ikey_len; i+)for (j = 0; jrow; j+)ctexti*row。
9、 + j = ptextnumberi + key_len*j;for (i = 0; ikey_len; i+)for (j = 0; jrow; j+)printf(%c, ctexti*row + j);return 0;int jiemi()int i = 0, j = 0, key_len = 0, text_len = 0, row = 0; char key1LENGTH = 0 ;char ptext1LENGTH * 10 = 0 ;char ctext1LENGTH * 10 = 0 ;char number1LENGTH = 0 ;printf(输入密文:n);scanf。
10、(%s, ctext1);while (ctext1i != 0)text_len+;i+;printf(输入密钥);scanf(%s, key1);i = 0;while (key1i != 0)key_len+;i+;for (i = 0; ikey_len; i+)int j = 0;number1i = 0;for (j = 0; jkey_len; j+)if (key1jkey1i)number1i+;for (i = 0; ikey_len; i+)int j = 0;for (j = i + 1; jkey_len; j+)if (key1j = key1i)number1j+。
11、;if (text_len%key_len = 0)row = text_len / key_len;elserow = text_len / key_len + 1;for (i = 0; ikey_len; i+)for (j = 0; jrow; j+)ptext1number1i + key_len*j = ctext1i*row + j;for (i = 0; ikey_len; i+)for (j = 0; jrow; j+)printf(%c, ptext1i*row + j);return 0;int main()int a;printf(加密选择1,解密选择2);scanf(%d, &a);if (a = 1)jiami();else if (a = 2)jiemi();return 0。
-
C语言置换密码
2020-09-02 18:34:22C语言置换密码 置换密码:将明文按照密钥的长度为一行排成矩阵,不足用其他字符补齐,再按密钥的顺序重新排列每一列,按竖排读出得到密文 例子: 明文:Beijing2008OlympicGames 密钥:421365 用$补齐矩阵 明文的...C语言置换密码
置换密码:将明文按照密钥的长度为一行排成矩阵,不足用其他字符补齐,再按密钥的顺序重新排列每一列,按竖排读出得到密文
例子:
明文:Beijing2008OlympicGames
密钥:421365
用$补齐矩阵
明文的矩阵:
B e i j i n
g 2 0 0 8 O
l y m p i c
G a m e s $
对密钥的解释:密钥的第一位是3,就是把明文的第3列放到密文的第一列。
密文的矩阵:
i e j B n i
0 2 0 g O 8
m y p l c i
m a e G $ s
得到的密文:
i0mme2yaj0peBglGnOc$i8is解密:
将密文如下排列:
i 0 m m
e 2 y a
j 0 p e
B g l G
n O c $
i 8 i s按密钥的顺序依次读取每一列中的每一行
密钥是421365,则先读取第一列中的第4行的B。C语言代码:
#include<stdio.h> #include<string.h> #include<stdlib.h> int main() { int len = 0, row = 0,i = 0,j=0,check=2; char plainText[2048] = { 32 }, temp[2048] = { 32 }; char key[10] = { 0 }, tempkey[10] = { 0 }; printf("输入原文:\n"); scanf("%s", &plainText); printf("原文长度:%d\n", strlen(plainText)); printf("加密:0;解密:1\n"); scanf("%d", &check); if (check == 0) { //加密,只需执行1次操作 for (i = 0; plainText[i] != '\0'; i++)temp[i] = plainText[i]; printf("输入密钥:\n"); scanf("%s",&key); len = strlen(key); if (strlen(plainText) % len == 0)row = strlen(plainText) / len; else { row = strlen(plainText) / len + 1; for (; i < row * len; i++)temp[i] = '$';//如果明文长度与矩阵不匹配则添加填充的符号 } temp[i] = '\0'; for (i = 0; i < len; i++) { tempkey[i] = key[key[i]-'0'-1]; } //这个循环是为了与下面的输出做匹配,修改了密钥的顺序 //可以直接在下面改读取明文的方法 for (i = 0; i < len; i++) { for (j = 0; j < row; j++) { printf("%c", temp[*(tempkey + i) - '1' + j * len]); } } printf("\n"); } else if(check==1){ while (1){//使用了循环,在解密时可以多次尝试不同密钥 for (i = 0; plainText[i] != '\0'; i++)temp[i] = plainText[i]; plainText[i] = '\0'; printf("输入密钥:\n"); scanf("%s",&key); row = strlen(key); len = strlen(plainText) / row;//这里不需要修改密文,因为密文在原来加密时应该的填充就已经加过了;密钥的长度应该是密文长度的因数 for (i = 0; i < len; i++) { for (j = 0; j < row; j++) { printf("%c", temp[(*(key + j)-'1')*len+i]); } } printf("\n"); } } else { printf("输入有误!\n"); return; } }
代码可能有啰嗦、不合理的地方,欢迎指出
-
c语言编写的置换密码源代码
2010-12-13 16:19:56c语言编写的置换密码源代码 已经测试 可以运行 -
密码学列置换密码程序
2010-06-12 15:48:05用c语言实现的古典密码算法列置换的演示程序。 -
置换密码的c++实现程序
2011-03-26 15:00:01古典密码体系中最基本的一种密码机制,使用c++设计完成 -
置换密码代码简单实现(C语言)
2018-09-06 19:42:10置换密码的特点是仅有一个发送方和接受方知道的加密置换(用于加密)及对应的逆置换(用于解密)。它是对明文L长字母组中的字母位置进行重新排列,而每个字母本身并不改变。 代码实现: #include<stdio....置换只不过是一个简单的换位,每个置换都可以用一个置换矩阵Ek来表示。每个置换都有一个与之对应的逆置换Dk。置换密码的特点是仅有一个发送方和接受方知道的加密置换(用于加密)及对应的逆置换(用于解密)。它是对明文L长字母组中的字母位置进行重新排列,而每个字母本身并不改变。
代码实现:
#include<stdio.h> #include<string.h> int main() { char m[999999],c[999999]; int x[26]; int t,k,len,a=0; printf("请输入你要输入的明文:"); scanf("%s",m); len=strlen(m); printf("\n"); printf("选择密钥长度:"); scanf("%d",&k); t=k-len%k; //补全空格位数 printf("\n"); printf("请输入你选择的密钥方式:\n"); for(int i=0; i<k; i++) scanf("%d",&x[i]); for(int j=0; j<(len+t)/k; j++) /* 分组 --> 这里j<3 有0,1,2三组 */ for(int i=0; i<k; i++) { c[a++]=m[x[i]+k*j-1]; /* m是输入的明文字符串 x[i]是输入的密钥方式 m[x[i]]即把密钥方式作为m字符串的数组位置 */ //printf("%d\n",x[i]+k*j); } for(int i=0; i<=len+t; i++) printf("%c",c[i]); printf("\n"); return 0; }
效果图:
-
列置换加密技术c语言程序实现
2011-06-08 11:08:37这是列置换加密的c程序,有关密码学的加解密 -
替代密码和置换密码地C语言实现
2021-05-19 09:42:44《替代密码和置换密码地C语言实现》由会员分享,可在线阅读,更多相关《替代密码和置换密码地C语言实现(13页珍藏版)》请在人人文库网上搜索。1、实验一一、实验名称:替代密码和置换密码的实现二、实验目的:通过... -
单表置换密码的C++代码实现
2015-11-26 09:50:54单表置换密码的C++代码实现,源码直接可以用 -
替代密码及置换密码的C语言实现.doc
2021-05-22 03:04:18WORD完美格式技术资料 专业整理实验一一、实验名称:替代密码和置换密码的实现二、实验目的:通过编程实现替代密码算法和置换密码算法,加深对古典密码体系的了解,为以后深入学习密码学奠定基础。三、实验内容:A:... -
替代密码和置换密码的C语言实现.doc
2021-05-22 03:02:47整理实验一一、实验名称:替代密码和置换密码的实现二、实验目的:通过编程实现替代密码算法和置换密码算法,加深对古典密码体系的了解,为以后深入学习密码学奠定基础。三、实验内容:A:替代密码1、实验原理:使用... -
密码学
2021-05-26 02:44:57实验一 古典密码算法实验一、实验目的(1)掌握密码学基础知识,包括明文、密文、密钥、加密和...二、实验内容编程实现移位密码、维吉尼亚密码、周期置换密码、列置换密码算法,分别用这些加密算法对文本数据进行加... -
置换密码 古典密码算法
2011-11-21 23:08:48置换密码算法的原理是不改变明文字符,而是按照某一规则重新排列消息中的比特或字符顺序,才而实现明文信息的加密。置换密码有时又称为换位密码。 矩阵换位法是实现置换密码的一种常用方法。它将明文中的字母按照... -
古典密码实验报告.doc
2021-05-26 02:45:57古典密码算法班 级:学 号:姓 名:实 验 时 间: 2014年4月成 绩:指 导 教 师:实验室名称:哈尔滨工程大学实验室与资产管理处 制一、实验名称 古典密码算法实验目的通过编程实现经典的代替密码算法和置换密码,... -
凯撒加密和置换加密程序实现加解密 C语言
2011-09-27 15:54:43是使用C语言写的,可以实现凯撒加密和置换加密。程序已经运行过,下载后直接运行就可以了。 -
置换密码代码加详解
2022-03-16 17:17:250x01 置换密码概要 置换密码(Permutation Cipher)又称为换位密码,总的来说就是明文的字符保持不变,但是对位置进行改变 0x02 周期置换密码 将明文P按固定长度m进行分组,然后对分组后的每个子串按某种... -
用C++实现置换密码的加密解密算法
2012-04-09 20:52:37用C++实现置换密码的加密解密算法,此文档为实现代码 -
转的一个简单的加密算法
2021-05-22 06:06:14/*用来保存密码*/ if(argc!=4){/*容错处理*/ printf("\nIn-fname:\n"); gets(in_fname);/*得到要加密的文件名*/ printf("Password:\n"); gets(pwd);/*得到密码*/ printf("Out-file:\n"); gets(out_fname);/*得到加密... -
playfair密码 C语言实现
2017-03-17 16:50:52这个学期学校开了应用密码学的课,老师布置的一个作业就是挑选一种置换或者代换密码然后用C语言实现。刚开始拿到组长分配的任务,觉得playfair很简单,完全可以一个小时搞定,可是真正动手去写,才发现这个算法的... -
实验1-古典密码算法探究.doc
2021-05-24 02:10:50实验1-古典密码算法实验目的通过编程实现替代密码算法和置换密码算法,加深对古典密码体系的了解,为以后深入学习密码学奠定基础。实验原理古典密码算法曾被广泛应用,大都比较简单。它的主要应用对象是文字信息,... -
DES原理及C语言实现
2021-06-23 19:17:52初始置换--->进行运算(下面单独)--->初始逆置换----->密文 运算中涉及到:子密钥、F函数 下面逐渐细说 二、细节分析 子密钥的生成 64位密钥变成56位 64密钥经过一个矩阵PC-1进行筛选得到有效56位... -
SM4密码算法实现(C语言只使用stdio.h库)
2021-12-23 23:03:39SM4算法分析与实现 SM4算法简介 SM4密码算法是一个分组算法。数据分组长度为128比特,密钥长度为128比特。加密算法与密钥扩展算法都采用32轮迭代结构。SM4密码算法以字节(8位)和字(32位)为单位进行数据处理。SM4... -
DES加密实现(C语言)
2020-11-07 19:26:35DES加密实现(C语言) 最近上完密码学的课,实验要求实现des加密,作为菜鸟参考了好多文章才写出来,记录一下 参考博客: https://blog.csdn.net/m0_37962600/article/details/79912654 ...数据加密标准(Data ... -
c语言实现DES加密解密
2021-09-17 15:41:17c语言实现DES加密解密欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、... -
Des加密解密C语言实现
2022-03-22 15:04:30它是由IBM公司研制的一种对称密码算法,对称性是指它使用同一个秘钥来加密和解密数据,与之相对应的RSA加密算法则是一种非对称密码算法。Des加密需要双方事先共同拟定一个秘钥,不对第三方公开。 Des还是一种... -
C语言实现DES算法实验报告
2021-05-21 01:58:27《C语言实现DES算法实验报告》由会员分享,可在线阅读,更多相关《C语言实现DES算法实验报告(29页珍藏版)》请在人人文库网上搜索。1、xx工程大学实验报告(2015-2016学年第一学期)报告题目: DES加密算法 课程名称: ... -
C语言实现DES加密解密详解,原理+代码
2021-04-13 16:59:10解密加密加密密钥置换选择循环左移明文IP置换L16R16的运算拓展置换S盒P置换IP逆置换解密 加密 DES加密算法其实分为两个部分,一部分对密钥进行处理 ,一部分对明文进行处理。 下面从一个例子说明: 64位明文: M=...