密码学课上学到的两种加密算法,下面给出两种算法的源码:

移位密码:
(1)加密算法:

void EnShiftCipher(char* plaintext,int k)
{int i=0;int m=0,n=0;int length = strlen(plaintext);while (length--){m = plaintext[i] - 'a';n = (m + k) % 26;printf("%c", 'a' + n);i++;}printf("\n");
}

(2)解密算法:

void DeShiftCipher(char* ciphertext, int k)
{int i = 0;int m = 0, n = 0;int length = strlen(ciphertext);while (length--){m = ciphertext[i] - 'a';n = (m -k) % 26;(n>=0) ? n = n: n = n + 26;printf("%c", 'a' + n);i++;}printf("\n");
}

解密算法里面会出现模结果出现负数的情况。

仿射密码:
(1)加密算法:

void EnAffineCipher(char* plaintext, int* k)
{int i = 0;int m = 0, n = 0;int length = strlen(plaintext);while (length--){m = plaintext[i] - 'a';n = (k[0] * m + k[1]) % 26;printf("%c", 'a' + n);i++;}printf("\n");
}

(2)解密算法:

void DeAffineCipher(char* ciphertext, int* k)
{int i = 0;int m = 0, n = 0;int length = strlen(ciphertext);int MultiInverse = getMultiInverse(k[0], 26);while (length--){m = ciphertext[i] - 'a';n = (MultiInverse*(m-k[1])) % 26;(n >= 0) ? n = n : n += 26;printf("%c", 'a' + n);i++;}printf("\n");}

这里需要注意的是解密算法里面,用到的a^-1是a在Zm中的乘法逆元,而不是a的倒数,下面给出n在Zm中的乘法逆元的代码:

int getMultiInverse(int n, int m)
{for (int i = 0; i < m; i++){if ((n * i) % m == 1)return i;}return -1;
}

C语言实现移位密码算法,仿射密码算法相关推荐

  1. 仿射密码python_仿射密码加解密 python

    参数选取:模数n=26+10=36,k2为学号后2位:k1为与学号后2位最近的素数. 加解密:加密自己名字的全拼,再解密. 密钥 k = (k1 , k2) 仿射密码加解密算法是:    m:是输入的 ...

  2. 密码学—仿射密码实验报告

    古典密码算法实验报告 姓名:空の城 学号:你猜 专业班级:网络安全专业 一.实验目的 通过编程实现替代密码算法--仿射密码算法,加深对古典密码体制的了解,为深入学习密码学奠定基础. 二.实验原理 仿射 ...

  3. 仿射密码破解——再别康桥

    这里有用仿射加密的一段诗歌密文(空格标点等没有加密),请尝试还原为明文并翻译为中文 Ptfxgj Jnno-afv wn Htzaixojv Tjtxg Af Yd Mqxzn Kvif bdxvws ...

  4. 仿射密码(代换密码)

    1.基本概念 加法密码和乘法密码结合就构成仿射密码,仿射密码的加密和解密算法是:C= Ek(m)=(k1*m+k2) mod n 加密过程:c=E(p)=(a*p+b)mod26 解密过程:p=D(c ...

  5. java仿射密码加解密实现,仿射密码-Affine cipher

    [实例简介] 题目:课程设计 环境:Visual C++ 6.0 仿射密码是由加法密码和乘法密码结合就构成. 仿射密码的加密和解密算法是: C= Ek(m)=(k1m+k2) mod n M= Dk( ...

  6. 仿射密码 [GKCTF2020]小学生的密码学

    在仿射密码中,加密函数定义为: e(x)=(ax+b)mod26 a,b\inZ_{26}.因为这样的函数被称为仿射函数,所以这样的密码体制也称为仿射密码 符合仿射密码的特征 在线解密 然后将 sor ...

  7. 仿射密码解密 频率法

    密码作业 仿射密码解密 频率法 文本控制输入输出 中间代码有参考 从密文中获得字母频次统计表. C→E,K→T 4a+b=2,19a+b=10 得到的解与可mod26所有的合法值比较 s[14] = ...

  8. 仿射密码加密解密(C语言)

    仿射密码是一种古典移位密码,其算法设计时用到的数学基础是模运算和同余方程.它是一个字母对一个字母的加密密码.定义明文空间 P = Z 26 P={\rm Z}_{26} P=Z26​ ,密文空间 C ...

  9. 凯撒加密的python语言程序_python实现凯撒密码、凯撒加解密算法

    凯撒密码的原理:计算并输出偏移量为3的凯撒密码的结果 注意:密文是大写字母,在变换加密之前把明文字母都替换为大写字母 def casar(message): # *************begin* ...

  10. 仿射密码(C语言实现)

    仿射密码(C语言实现) 简介 仿射密码是一种表单代换密码,字母表的每个字母相应的值使用一个简单的数学函数对应一个数值,再把对应数值转换成字母. 加解密公式 加密函数: Y =(AX+B)%26 解密函 ...

最新文章

  1. 如何用c语言将度分秒变为弧度_弧度与角度从哪里来
  2. 关于机器学习,不可不知的15个概念
  3. 混合云备份利用自定义Workflow保护MySQL的实践
  4. PHP显示今天、今月、上月、今年的起点/终点时间戳
  5. POJ 1661 Help Jimmy(递推DP)
  6. Bear and Finding Criminals
  7. 怎么消除间隔间的空白字符
  8. 思科路由器RIP路由汇总
  9. linux 中的快捷键
  10. Linux: 联想小新 Air15 Linux 安装 AX210 网卡驱动
  11. 中级计算机平面设计考试题,平面设计师(中级)技能试题答案
  12. 港科夜闻丨香港科大团队最新研究:双色发射AIEgen用于无标记特异性识别dsDNA和SNPs检测...
  13. Linux中fork函数详解
  14. 5G通信在应急系统中的应用
  15. Mysql数据备份的概念
  16. 自己动手搭网站(六):javaweb搭建一个简单的个人博客系统
  17. springboot入门到入坟
  18. 步进电机的使用方法和控制方式基本介绍
  19. android 融云群组列表,群组中 @ 功能介绍
  20. 计算机科学与未解决的难题,NP(未解难题)_百度百科

热门文章

  1. JavaScript--闭包的理解
  2. HTML5期末大作业:旅游网站设计——桂林旅游(3页) HTML+CSS+JavaScrip
  3. python爬取酷狗音乐_python 爬虫 爬取酷狗音乐
  4. 小米笔记本 java_分享下我的小米笔记本pro安装黑苹果(Mojavae)的经历
  5. 微信小程序中使用emoji表情
  6. 阿里云短信验证第三方接口(快速使用)
  7. 腾达U12千兆无线网卡在Linux下的支持方式(安装过程)
  8. i2c驱动之at24c08(1)
  9. javascript获取浏览器窗口大小 获取屏幕,浏览器,网页高度宽度
  10. Java 类加载器 详解