Vernam密码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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); } }
以上是关于Vernam密码的主要内容,如果未能解决你的问题,请参考以下文章
修改MySQL密码报错“ERROR 1819 (HY000): Your password does not satisfy the current policy requirements“(代码片段
Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段
连接MySQL出现错误:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)(代码片段