1. 程式人生 > >單表代換密碼(凱撒密碼)

單表代換密碼(凱撒密碼)

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