//仿射变换主要是乘法与加法变换的结合
//C=a*m+k mod 26 加密
//M=a^-1(c-k)mod 26 解密
#include <iostream>
#include<fstream>
#include<string.h>
#include<stdlib.h>
#define MAX 10000
using namespace std;int gcd(int a, int b) /*辗转相除法求a,b的最大公因数*/
{int k = 0;do{k = a%b;a = b;b = k;}while(k!=0);return a;
}int Ni(int a, int b) /*求a相对于b的逆元*/
{int i = 0;while(a*(++i)%b!=1);  //a*i=1 mod breturn i;
}void Fshe(char c[MAX],char m) /*仿射密码*/
{int length, i=0, ka=0, kb=0, tmp;do{cout<<"ka 和 kb : ";cin>>ka>>kb;getchar();if(gcd(ka,94)!=1){cout<<"密钥输入有误,请重新输入!\n";//如果输入的秘钥与模数94不互素则需要重新输入}}while(gcd(ka,94)!=1&&m=='d');  //用于验证秘钥的合法性length = strlen(c);if(m=='e'){for(i=0; i<length; i++) //加密算法c[i]=ka*m[i]+kb mod 94{c[i] = (ka*(c[i]-32)+kb)%94+32;  //字符ASCII从32----126}}if(m=='d'){for(i=0; i<length; i++)  //解密算法 m[i]=Ni*(c[i]-kb)mod 94        {{c[i] =Ni(ka,94)*((c[i]-32)-kb);  //解密需要使用乘法逆元}}}int main()
{ifstream fin("d:/mingwen.txt",ios::in);  //明文存储的文件ofstream fout("d:/miwen.txt",ios::out);    //新建文件存储密文ifstream fin1("d:/miwen.txt",ios::in);     //需要打开密文文件ofstream fout1("d:/jiemi.txt",ios::out);    // 存储解密后的数据char str[MAX],str1[MAX];if(!fin)  //依次打开文件{cout<<"can't open ! please creat the file (d:/mingwen.txt) ! \n";exit(1);}if(!fin1){cout<<"can't open fin1!\n";exit(1);}if(!fout){cout<<"can't open fout!\n";exit(1);}if(!fout1){cout<<"can't open fout1!\n";exit(1);}char m;cout<<"请选择加密(e)解密(d)操作:";   //增加操作性选择加密或解密操作cin>>m;switch(m){case 'e':fin.getline(str,MAX);Fshe(str,m);  //加密操作//cout<<str<<endl;  //输出加密后的字符fout<<str;cout<<"明文已加密!\n";break;case 'd':fin1.getline(str1,MAX);Fshe(str1,m); //解密操作// cout<<str<<endl;  //输出解密后的字符fout1<<str1;cout<<"密文已解密!\n";break;default:break;}fin.close();  //文件操作完后关闭文件fout.close();fin1.close();fout1.close();return 0;
}

【现代密码学】仿射密码加密相关推荐

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

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

  2. 信息安全之仿射密码加密和解密

    本文利用仿射密码,对一个只含可打印字符的txt文件进行加密和解密. //加解密时,文件内容为所有可打印字符,即ASCII码从32-126的95个字符 #include<iostream> ...

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

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

  4. 仿射密码加密解密实现

    加密和解密都是数学函数.对此并没有很多了解.只为一解答一道作业题目来了解这两个函数以及将函数转为代码. 先从百度基本了解一下这个加密函数 只靠通识的数学知识,理解 是有难度 首先是计算优先级的疑惑,通 ...

  5. 仿射密码加密解密代码(java)

    加密代码 import java.util.*; class fangshe {public static void main(String[] args) {Scanner input=new Sc ...

  6. python用表达式解密密文_基于Python解密仿射密码

    新学期有一门密码学课,课上老师布置了一道密码学题,题目如下: 解密由仿射密码加密的密文"DBUHU SPANO SMPUS STMIU SBAKN OSMPU SS" 想解密这个密 ...

  7. 使用Python解密仿射密码

    新学期有一门密码学课,课上老师布置了一道密码学题,题目如下: 解密由仿射密码加密的密文"DBUHU SPANO SMPUS STMIU SBAKN OSMPU SS" 想解密这个密 ...

  8. 实验2 仿射密码算法

    [一.实验目的] 通过实验熟练掌握仿射密码算法的加密解密过程,加深对古典密码体制的了解,为深入学习密码学奠定基础. [二.实验原理] 设两个整数α和β,及gcd(α,26)=1, 加密过程:x → α ...

  9. 仿射密码实验——Python实现(完整解析版)

    文章目录 前言 实验内容 实验操作步骤 1.编写主程序 2.编写加密模块 3.编写解密模块 4.编写文件加解密模块 实验结果 实验心得 实验源码 scirpt.py usefile.py 前言 实验目 ...

最新文章

  1. Android nginx php,Android pad中有关nginx,mysql,php的集成问题汇总
  2. 既然有 GC 机制,为什么还会有内存泄露的情况
  3. 【转】Unity3D将来时:IL2CPP(上)
  4. SpringBoot(Thymeleaf)拼接跳转链接
  5. apache 支持php urlmanager,Yii中urlManager的配置
  6. 解决ubuntu中zip解压的中文乱码问题
  7. 面试 | #面试面试面试 做#Java 就是要这种不要脸的…
  8. tensorflow之读取jpg图像保存为tfrecord再读取
  9. Iocomp Ultra Pack ActiveX 5.12
  10. JS实现动态生成二维码,并在中间插入logo
  11. ARDUINO LCD显示简单的汉字、符号(保姆级教程!)
  12. Kafka踩坑 - Couldn't find leaders for Set
  13. TVS和ESD的区别
  14. elasticsearch7.x Java High Level REST客户端封装工具
  15. 滴滴裁员2000,赔偿方案已出!程序员:我很开心!
  16. Java进阶之路~适配器设计模式amp;字符串方法
  17. Python 可轻松生成图文并茂的PDF报告!
  18. hannoi塔(汉诺塔)移动过程解析
  19. win10蓝牙功能不见了_Win10 2004更新了什么?新功能新特性汇总
  20. 主持人大赛计算机专业,计算机系主持人大赛简报

热门文章

  1. 嵌入式是什么?(一个电子产品的从0到1)-杂谈
  2. 推荐一款国产ECG心电芯片
  3. DP2515国产带SPI接口汽车CAN总线控制器芯片兼容替代MCP2515/MCP2515-I/ST
  4. python在线编程平台-在线python编程
  5. Element UI 官网
  6. 跨站脚本(XSS)攻击
  7. 【BIT2021程设】7. 一夜发白《千字文》——Unicode和UTF-8、位运算
  8. python怎么跑数据_python定时重跑获取数据
  9. 关于C语言的基本语法知识
  10. 文件共享服务器onedrive,如何共享OneDrive文件和文件夹