//playfair
#include<stdio.h>
#include<string.h>
int main()
{char pf[5][5]={'c','a','l','m','d','o','w','n','b','e','f','g','h','i','k','p','q','r','s','t','u','v','x','y','z'};printf("输入明文:\n");char ms[20];gets(ms);int len =strlen(ms);int i,j;int x;for(i=0;i<len;i++){if(ms[i]=='j')ms[i]='i';}for(i=0;i<len;i++){if(ms[i]==ms[i+1]){    x=i+1;for(j=0;j<len-x;j++){ms[len-j]=ms[len-j-1];}ms[i+1]='q';}}ms[len+1]='\0';len=strlen(ms);if (len%2==1){ms[len]='q';len=len+1;}ms[len]='\0';puts(ms);printf("\n");int num=0;int i1 ,j1,i2,j2;char code[20];while(num<len){   for(i=0;i<5;i++){for(j=0;j<5;j++){if(ms[num]==pf[i][j]){i1=i;j1=j;}if(ms[num+1]==pf[i][j]){i2=i;j2=j;}}  }if(j1==j2){if(i1!=4&&i2!=4){code[num]=pf[i1+1][j1];code[num+1]=pf[i2+1][j2];          }if(i1==4){code[num]=pf[0][j1];code[num+1]=pf[i2+1][j2];}if(i2==4){code[num+1]=pf[0][j2];code[num]=pf[i1+1][j1];}}else if(i1==i2){if(j1!=4&&j2!=4){code[num]=pf[i1][j1+1];code[num+1]=pf[i2][j2+1];}if(j1==4){code[num]=pf[i1][0];code[num+1]=pf[i2][j2+1];}if(j2==4){code[num]=pf[i1][j1+1];code[num+1]=pf[i2][0];}}else{code[num]=pf[i1][j2];code[num+1]=pf[i2][j1];}num=num+2;}puts(code);//decode part
printf("\n");
printf("输入密文:\n");
printf("注意我们这里规定!代表i/j \n");
char msi[20];
char decode[20];
gets(msi);
int length=strlen(msi);
int reg;
while(reg<length)
{for(i=0;i<5;i++){for(j=0;j<5;j++){if(msi[reg]==pf[i][j]){i1=i;j1=j;}if(msi[reg+1]==pf[i][j]){i2=i;j2=j;}} }if(j1==j2)
{if(i1==0)
{decode[reg]=pf[4][j1];decode[reg+1]=pf[i2-1][j2];}  if(i2==0){decode[reg]=pf[i1-1][j1];decode[reg+1]=pf[4][j2];}elsedecode[reg]=pf[i1-1][j1];decode[reg+1]=pf[i2-1][j2];
}
else if(i1==i2){if(j1==0){   decode[reg]=pf[i1][4];decode[reg+1]=pf[i2][j2-1];}if(j2==0){decode[reg]=pf[i1][j1-1];decode[reg+1]=pf[i2][4];  }   if(j1!=0&&j2!=0){    decode[reg]=pf[i1][j1-1];decode[reg+1]=pf[i2][j2-1];  }}
else
{     decode[reg]=pf[i1][j2];decode[reg+1]=pf[i2][j1];}  reg=reg+2;}   decode[length]='\0';puts(decode);printf("\n");if(decode[length-1]=='q'){decode[length-1]='\0';  for(i=0;i<length-2;i++){if(decode[i]==decode[i+2]){for(j=i+1;j<length-1;j++){decode[j]=decode[j+1];}for(j=0;j<length-1;j++){if(decode[j]=='i'){printf("正在跳转....\n");decode[j]='!';puts(decode);}}}}for(j=0;j<length;j++){if(decode[j]=='i'){printf("明文有两种:\n");puts(decode);decode[j]='j';printf("\n");puts(decode);}}puts(decode);}else{  for(i=0;i<length-1;i++){if(decode[i]==decode[i+2]){   for(j=i+1;j<length-1;j++){decode[j]=decode[j+1];}decode[length-1]='\0';for(j=0;j<length-1;j++){if(decode[j]=='i'){printf("正在跳转....\n");decode[j]='!';puts(decode);}}}}for(j=0;j<length;j++){if(decode[j]=='i'){printf("明文有两种:\n");puts(decode);decode[j]='j';printf("\n");puts(decode);}}puts(decode);}return 0;}

playfair密钥矩阵加密--c语言相关推荐

  1. php dsa算法,openssl_private_encrypt使用DSA算法生成的密钥无法加密

    openssl_private_encrypt($originalData, $encryptData, $privateKey, OPENSSL_ALGO_DSS1) 警告信息: Warning: ...

  2. 对称密码的集中式密钥分配协议(C语言)

    目录 实验内容 实验原理 对称密码的集中式密钥分配协议 step1 step2 step3 step4 step5 DES算法 ECB(电码本模式) 代码实现 用户结构体的声明 全局变量的声明 fin ...

  3. RSA加密——go语言版

    RSA加密--go语言版 源起 公钥和私钥格式关系 公钥 私钥 go语言生成公私钥 go加载私钥 pkcs1 pkcs8 go加载公钥 go进行rsa加密和验签 openssl生成的公私钥 去掉私钥的 ...

  4. 密码学——Hill体制密码中已知明文M和密文C求解密钥矩阵K的两种方法之逆矩阵求解法和待定系数求解法

    本文主要解决古典密码中的Hill体制密码在已知明文M和密文C的情况下求解密钥矩阵K的两种方法:①求逆矩阵②待定系数法. 如若不懂Hill体制的古典密码可以参照我上一篇文章密码学--几种典型的古典密码体 ...

  5. 对称密钥加密算法 对称轮数_选择Java加密算法第2部分–单密钥对称加密

    对称密钥加密算法 对称轮数 抽象 这是涵盖Java加密算法的三部分博客系列的第2部分. 该系列涵盖如何实现以下功能: 使用SHA–512散列 AES–256 RSA–4096 这第二篇文章详细介绍了如 ...

  6. 选择Java加密算法第2部分–单密钥对称加密

    抽象 这是涵盖Java加密算法的三部分博客系列的第2部分. 本系列介绍如何实现以下目标: 使用SHA–512散列 AES–256 RSA–4096 这第二篇文章详细介绍了如何实现单密钥对称AES-25 ...

  7. PHP通过OpenSSL生成证书、密钥并且加密解密数据,以及公钥,私钥和数字签名的理解...

    一.公钥加密 假设一下,我找了两个数字,一个是1,一个是2.我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥. 我有一个文件,不能让别人看,我就用1加密了.别人找到了这个 ...

  8. geo读取表达矩阵 RNA-seq R语言部分(表达矩阵合并及id转换)

    geo读取表达矩阵 RNA-seq R语言 方法一:1.从geo页面直接下载表达矩阵,然后通过r读取表达矩阵 2.利用getgeo函数读取表达矩阵 3.利用geo自带的geo2r,调整p值为1,获取探 ...

  9. iOS HAMC(哈希)256带密钥的加密方法

    找了很多地方都没有找到iOS关于哈希带密钥的加密方法,最终还是在朋友的帮助下搞定的. -(NSString*) hmacForSecret:(NSString*)secret data:(NSStri ...

最新文章

  1. 使用录制宏制作工资条
  2. Qt Creator分析代码
  3. win2003 定时重启BAT
  4. python中模块、函数与各个模块之间的调用
  5. 在python3中如何加载静态文件详版步骤
  6. IOS开发基础知识--碎片5
  7. 第 1 章 多线程基础介绍
  8. rust腐蚀 木制窗户怎么修_潜艇围壳上的窗户为什么不会裂开?
  9. 服務端的EIT造形+Socket代碼
  10. python客户端与服务器端通信_python客户端与服务器端的通信
  11. 了解Spring AOP吗
  12. linux aix 环境,Aix5.3安装Bash环境
  13. 基于51单片机超声波红外避障语音导盲仪设计(全套资料)
  14. 郭盛华如今现状如何呢? 身价早过亿,网友:期待开直播
  15. 【运筹学】整数规划 ( 整数规划求解方法 | 指派问题 )
  16. 大数据分析,数据可视化之美,BI
  17. BZOJ 2563: 阿狸和桃子的游戏
  18. THINKPHP框架的优秀开源系统推荐
  19. 痞子衡嵌入式:记录i.MXRT1060驱动LCD屏显示横向渐变色有亮点问题解决全过程(提问篇)...
  20. 企业数字化转型“核心方法论”

热门文章

  1. 如何使用电脑来程控数字示波器(一)USB接线程控
  2. 个人免签支付系统,2019完美的个人支付源码
  3. 深入浅出地理解机器人手眼标定
  4. python 调用剪切板
  5. RTX3070+windows11cuda配置教程
  6. 魔界中的黑V天險(3)
  7. Android的Paint和Canvas的使用总结
  8. 苦逼程序员的真实生活
  9. VS2019 常用快快捷键
  10. 单反相机的传奇—佳能单反50年辉煌之路(连载三)