單表代換密碼(凱撒密碼)
阿新 • • 發佈:2019-02-07
- 單表代換密碼概述
- 對所有的明文字母都用一個固定的代換進行加密 ,因而稱為
- 單表代換密碼。加密過程中是從明文字母表到密文字母表的一一對映。例:
- 愷撒(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; }
-
- 結果演示
- 凱撒密碼密碼錶