置换密码c语言,替代密码和置换密码的C语言实现

《替代密码和置换密码的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。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值