Vernam加密法也称一次一密(One-Time-Pad),用随机的非重复的字符集合作为输出密文.这里最重要的是,一旦使用了变换的输入密文,就不再在任何其他消息中使用这个输入密文(因此是一次性的).输入密文的长度等于原消息明文的长度

#include
][];
],key[],emessage[],retMessage[];
int findRow(char);
int findColumn(char);
int findDecRow(char,int);
int main()
{
 ,j,k,r,c;
 k=;

 ;i<;i++)
 {
   k++;
   ;j<;j++)
   {
    arr[i][j]=k++;
    )
    k=;
   }
 }
 printf("\n输入明文\n");
 gets(message);
 printf("\n输入密钥\n");
 gets(key);
 // 加密
 ;key[i]!=NULL;i++)
 {
   c=findRow(key[i]);
   r=findColumn(message[i]);
   emessage[i]=arr[r][c];
 }
 emessage[i]='\0';
 printf("\n 密文为:\n\n");

 ;emessage[i]!=NULL;i++)
 printf("%c",emessage[i]);
 //解密
 ;key[i]!=NULL;i++)
 {
    c=findColumn(key[i]);
    r=findDecRow(emessage[i],c);
    retMessage[i]=arr[r][];
  }
  retMessage[i]='\0';
  printf("\n\n解密后的明文为:\n\n");
  ;retMessage[i]!=NULL;i++)
  printf("%c",retMessage[i]);
 );
}
int findRow(char c)
{
  int i;
  ;i<;i++)
  {
   ][i]==c)
   return(i);
  }
}
int findColumn(char c)
{
  int i;
  ;i<;i++)
  {
   ]==c)
   return(i);
  }
}
int findDecRow(char c,int j)
{
  int i;
  ;i<;i++)
  {
   if(arr[i][j]==c)
   return(i);
  }
}

最新文章

  1. Windows下的Memcache安装 linux下的Memcache安装
  2. Mysql数据库的通用安装方法
  3. activiti搭建(三)整合Modeler
  4. Hadoop2.2.0 手动切换HA环境搭建
  5. Salt自动化之自动更新Gitfs-爱折腾技术网
  6. 如何判断一个变量是数组Array类型
  7. 关于工作中Git相关的总结
  8. python爬虫之MongoDB测试环境安装
  9. [转] 用webpack的CommonsChunkPlugin提取公共代码的3种方式
  10. 开源数据流管道-Luigi vs Azkaban vs Oozie vs Airflow
  11. 如果django里的视图是类(CBV),应该如何写Url的测试用例?
  12. JMeter4.0二次开发之导入eclipse
  13. linux常用命令:free 命令
  14. c# 操作Word总结【转】
  15. WebService与WCF
  16. leetcode819
  17. python 爬虫系列01-连接mysql
  18. 图像处理框架 Core Image 介绍
  19. activiti自己定义流程之自己定义表单(一):环境配置
  20. 前端:常见的6种HTML5错误用法

热门文章

  1. Angular框架
  2. 说反话(c++实现)
  3. R语言学习笔记:向量
  4. Sharepoint学习笔记—习题系列--70-573习题解析 -(Q111-Q114)
  5. HBase权威指南环境配置
  6. Android开发--Apache服务器安装,解决Apache服务无法启动的问题
  7. 【转】C++的拷贝构造函数深度解读,值得一看
  8. 苹果手机不进post方法
  9. const,static,extern简介(重要)
  10. 使用JDBC对数据库进行查询的前期准备工作,以及简单的JDBC访问MySQL数据库(Mac)