仿射密码C语言,仿射密码怎么解密

  仿射密码C语言,仿射密码怎么解密

  我是刚刚的同学,刚入网的小白。()

  (疯狂的暗示喜欢!注意了!前进!喜欢!注意了!前进!)

  *你的支持是同学前进的最大动力!(欢迎来到山东政法学院网络空间安全学院!仿射密码加密解密原理(C语言实现)你最好先学习欧几里德算法和欧几里德的扩展算法!以下链接是欧几里德算法和欧几里德扩展算法的代码讲解!欧几里德算法和欧几里德扩展算法的代码解释

  仿射密码加密和解密的原理:

  效果图:(k1必须取模26为1,否则重新输入)

  详细代码:(加密和解密不分开,一起输出。有需要的同学可以自己改!)#包含stdio.h

  #包含字符串. h

  #包含数学. h

  #定义N 200

  使用命名空间std

  Integcd (intr0,intr1,intrn,ints,intt){//欧几里德扩展算法

  int R0=r0,R1=R1;

  if(r0==0r1==0){

  printf(错误:两个输入数字中有一个是零。\ n’);

  返回0;

  }

  int q=0,r2=0,s0=1,s1=0,s2=0,t0=0,t1=1,T2=0;

  而(r1!=0){

  q=r0/R1;

  r2=r0 % r1

  S2=s0-S1 * q;//计算新的s

  T2=t0-t1 * q;//计算新的t

  //更新r0,r1,s0,s1,t0,t1

  r0=r1r1=r2

  s0=s1s1=s2

  t0=t1t1=t2//保存S2和T2的值供下次使用。

  }

  rn=r0

  if(r0==1){

  s0=(R1(s0 % R1))% R1;

  t0=(R0(t0 % R0))% R0;

  Printf(与 k1: %d.\n ,s0相反);

  s=s0

  t=t0

  返回s0;

  }else if(r0!=1){

  Printf(错误:k1和26的最大公因数不是1,请重新输入!\ n’);

  返回0;

  }

  }

  int affinicipher(int k1,int k2,int p){

  int r,s,t;

  char消息[N 1];

  s=EGCD(p,k1,r,s,t);

  while(r!=1){

  Printf(请重新输入合法的k1!\ n’);

  scanf(%d ,k1);

  printf( \ n输入键为:k1=%d,k2=%d,p=%d \n ,k1,k2,p);

  EGCD(p,k1,r,s,t);

  getchar();

  }

  printf(输入要处理的消息:);

  //以回车(换行符)作为字符串读取的结束。默认情况下,它以空格、回车和tab键结束。

  scanf(%[^\n],message);

  printf( \ n消息/明文是:%s\n ,消息);

  int length=strlen(message);

  char密码[长度],解密[长度];

  //这是加密代码

  Printf(加密输入文本:\ n );

  printf(---\ n );

  for(int I=0;I长度;i ){

  if(消息[i]=a 消息[i]=z )

  cipher[i]=(k1*(消息[I]- a )k2)% p a);

  其他

  if(消息[i]=A 消息[i]=Z )

  cipher[i]=(k1*(消息[I]- A )k2)% p A);

  其他

  密码[I]=消息[I];

  }

  Printf(消息加密前后对比如下:\ n );

  printf(输入文本为:%s.\n ,message);

  printf(输出文本为:%s.\n ,cipher);

  //这是解密代码

  int reverse//k1的倒数

  printf( \ n解密输入文本:\ n );

  printf(---\ n );

  reverse=EGCD(k1,p,r,s,t);//求k1的倒数

  for(int I=0;I长度;i ){

  if(cipher[I]= a cipher[I]= z )//已经修复,不会出现个别字母错误。

  message[i]=((reverse*(密码[I]-k2- a )% p)p)& a ;

  其他

  if(cipher[i]=A cipher[i]=Z )

  message[i]=((reverse*(密码[I]-k2- A )% p)p)& A ;//现已修复,不会出现单个字母错误。

  其他

  消息[I]=密码[I];

  }

  Printf(消息解密前后对比如下:\ n );//我爱你中国很棒

  printf(输入文本为:%s.\n ,cipher);//5,3,26

  printf(输出文本为:%s.\n ,message);

  }

  int main(){

  int p,k1,k2;//仿射密钥c=k1*m k2 mod p经典密码p=26

  Printf (\ n请输入三个仿射密码参数:k1,k2,p,用逗号分隔:);

  //读取数值时,默认用空格分隔。如果需要逗号,请在%d: scanf(%d,%d ,k1,k2)后指定格式。

  scanf(%d,%d,%d ,k1,k2,p);

  printf( \ n输入键为:k1=%d,k2=%d,p=%d \n ,k1,k2,p);

  //getchar()可以在scanf()之后吸收回车,以便输入下一个字符/字符串。尤其是以后需要输入带空格的字符串的时候。

  getchar();

  affinicipher(k1,k2,p);

  }我是刚刚进网安的同学,小白。()

  (疯狂的暗示喜欢!注意了!前进!喜欢!注意了!前进!)

  *你的支持是同学前进的最大动力!

  转载请联系作者授权,否则将追究法律责任。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: