- 单表代换密码概述
- 对所有的明文字母都用一个固定的代换进行加密 ,因而称为
- 单表代换密码。加密过程中是从明文字母表到密文字母表的一一映射。例:
- 恺撒(Caesar)密码。
- 缺点:不能抗击字母频度分析,容易被破译
- 单表密码的弱点:明文和密文字母之间的一一代替关系。这使得明文中的一些固有特性和规律(比如语言的各种统计特性)必然反映到密文中去。
- 凯撒密码加解密过程(C实现)
-
#include <iostream> #include "string.h" using namespace std; char* CaesarEncrypt(char* plaintext); char* CaesarDecrypt(char* ciphertext); char a[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}; char b[26]={'X','N','Y','A','H','P','O','G','Z','Q','W','B','T','S','F','L','R','C','V','M','U','E','K','J','D','I'}; int main() { char plaintext[105]; printf("please input a string:\n"); gets(plaintext); char *ciphertext1=CaesarEncrypt(plaintext); CaesarDecrypt(ciphertext1); getchar(); getchar(); return 0; } char* CaesarEncrypt(char plaintext[]){ char ciphertext[105]; int i=0; int sizeofplaintext=strlen(plaintext); for(i=0;i<sizeofplaintext;i++){ int flag=0; for(int j=0;j<26;j++){ if(plaintext[i]==a[j]){ ciphertext[i]=b[j]; flag=1; } } if(flag!=1){ ciphertext[i]=' '; } } ciphertext[i]='\0'; printf("the ciphertext is:" ); printf("%s",ciphertext); char *str = new char[strlen(ciphertext) + 1]; //分配存储空间 strcpy_s(str, strlen(ciphertext) + 1,ciphertext); //将s中字符串复制到str,最后一个空间为'\0'结束符 return str; } char* CaesarDecrypt(char* ciphertext){ int sizeofciphertext=strlen(ciphertext); int i; char plaintext[105]; for(i=0;i<sizeofciphertext;i++){ int flag=0; for(int j=0;j<26;j++){ if(ciphertext[i]==b[j]){ plaintext[i]=a[j]; flag=1; } } if(flag!=1){ plaintext[i]=' '; } } plaintext[i]='\0'; cout<<"\nthe plaintext is:"<<plaintext<<endl; return plaintext; }
-
- 结果演示
- 凯撒密码密码表
单表代换密码(凯撒密码)
最新推荐文章于 2024-07-21 18:44:31 发布