Vernam密码

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

#include
char arr[26][26];
char message[22],key[22],emessage[22],retMessage[22];
int findRow(char);
int findColumn(char);
int findDecRow(char,int);
int main()
{
 int i=0,j,k,r,c;
 k=96;

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

 for(i=0;emessage[i]!=NULL;i++)
 printf("%c",emessage[i]);
 //解密
 for(i=0;key[i]!=NULL;i++)
 {
    c=findColumn(key[i]);
    r=findDecRow(emessage[i],c);
    retMessage[i]=arr[r][0];
  }
  retMessage[i]=‘\0‘;
  printf("\n\n解密后的明文为:\n\n");
  for(i=0;retMessage[i]!=NULL;i++)
  printf("%c",retMessage[i]);
 return(0);
}
int findRow(char c)
{
  int i;
  for(i=0;i<26;i++)
  {
   if(arr[0][i]==c)
   return(i);
  }
}
int findColumn(char c)
{
  int i;
  for(i=0;i<26;i++)
  {
   if(arr[i][0]==c)
   return(i);
  }
}
int findDecRow(char c,int j)
{
  int i;
  for(i=0;i<26;i++)
  {
   if(arr[i][j]==c)
   return(i);
  }
}
时间: 2024-10-09 04:54:29

Vernam密码的相关文章

密码学基础知识(三)古典密码

说完了前面那些,想起个事,本系列依据内容主要来自<现代密码学>马春光编著.我就是学这本书的. 好了,古典密码就是古时候的密码,哈哈,逗你玩的,shannon的保密系统的通信理论发表前的都是古典密码,会在密码学简史中介绍这位牛人的. 学习古典密码学的意义:学习设计原理和分析方法 古典密码也是,俩门派:置换和代换,顾名思义,一个是换了个原来有的,一个是换了个原来没有的.学术点讲就是前者明文和密文空间一样,后者 不一样.你要是问我啥是明文空间和密文空间啊,我就呵呵.是M 和 C.m明文的集合,c密文

古典密码-多表密码体制

如果明文中不同的位置的同一明文字母在密文中对应的密文字母不同,则称为多表密码体制. 代表性的多表密码: 1.Vigenere密码 2.Beaufort密码 3.running-key密码 4.Vernam密码 5.Hill密码 例子: 1.Vigenere密码加密: 设明文   m=m1m2...mn 密钥      k = k1k2...kn 则密文   c=Ek(m)=c1c2...cn 其中      ci=(mi+ki)(mod 26),(i=1,2,...,n) Vigenere密码解

第三章 传统加密技术

1 对称加密模型 对称加密防范的五个基本成分: 明文:原始的消息或是数据,是算法的输入 加密算法:加密算法对明文进行各种代替和变化 密钥:加密算法的输入,密钥独立于明文和算法,算法根据所用的特定密钥产生不同的输出 密文:算法的输入 解密算法:是加密算法的逆运算.输入密文和密钥,输出原始明文. 传统密码的安全使用满足如下两个要求: 机密算法必须足够强:即使对方拥有一定数量的密文和产生这些秘文的明文,他也不能破译密文或是发现密钥 发送者和接受者必须在某种安全模式下获得密钥并且必须保护密钥的安全. 对

密码算法详解——AES

0 AES简介 美国国家标准技术研究所在2001年发布了高级加密标准(AES).AES是一个对称分组密码算法,旨在取代DES成为广泛使用的标准. 根据使用的密码长度,AES最常见的有3种方案,用以适应不同的场景要求,分别是AES-128.AES-192和AES-256.本文主要对AES-128进行介绍,另外两种的思路基本一样,只是轮数会适当增加. 1 算法流程 AES加解密的流程图如下: AES加密过程涉及到4种操作:字节替代(SubBytes).行移位(ShiftRows).列混淆(MixCo

linux 本地账号密码无法登陆,一直返回 登陆的login界面

登陆redhat一直是返回login,账号和密码没错 通过ssh crt类的软件远程连接系统 然后更改文件   vi /etc/pam.d/login 把 :session required /lib/security/pam_limits.so 更改为:session required /lib64/security/pam_limits.so wq保存

凯撒密码、GDP格式化输出、99乘法表

1凯撒密码加密plaincode=input('请输入明文:')print('密文:',end='')for i in plaincode:print(chr(ord(i)+3),end='') 2.国家名称 GDP总量(人民币亿元) 中国 ¥765,873.4375澳大利亚 ¥ 78,312.4375 print('国家名称 GDP总量(人民币亿元)')print('{0:''<12}¥{1:''>10,.2f}'.format('中国',765873.4375))print('{0:''&

洛谷 P1079 Vigen&#232;re 密码 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:https://www.luogu.org/problem/show?pid=1079 题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密 码.Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南北战争中为 南军所广泛使用. 在密码学中,我们称需要加密的信息为明文,用 M 表示:称加密后的信息为密文,用 C 表示:而密钥是一种

Mysql的更改密码

检查mysql的服务是否能开启,保证mysql的服务能正常开启,进行一下步骤 第一步:将你的Mysql解压到C盘根目录 第二步:(解压后进入目录,找到install.bat文件,用Ediplus打开,找到 --install mysql 和 net start mysql,两个mysql必须一样)进入cmd命令,没有配置环境变量的需要手动切换到mysql\bin的目录下cd命令进入 第三步:使用命令登陆mysql(mysql -localhost -u root),输入原始密码. 第四步: my

《linux破解root密码》

以下实验操作基于RHEL7.0下进行 步骤如下: 1. 重启系统 2. 按任意键,以中断启动加载器的倒计时. 3. 把光标移动到需要启动的条目. 4. 按e键,编辑该条目 把光标移动到linux16开头的行. 删除 console=ttys0,115200n8 在该行末尾,输入一个空格,然后添加  rd.break 注:rd.break表示控制权从initramfs转移到实际系统之前,进行中断. 5.  ctrl+x使用该改动并启动 启动好后,实际的根文件系统,以只读方式挂载到 /sysroot