程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 編程實現恩格瑪加密機(C++)

編程實現恩格瑪加密機(C++)

編輯:C++入門知識

編程實現恩格瑪加密機(C++)


相信各位看了《模仿游戲》之後,都會對這個二戰的加密方法感到很好奇吧,我也不例外,因此編了個程序實現了恩格瑪加密機,這機器最大的特點就是有著自反性,只要初始設置一致的時候,那麼它就是自反的,比如輸入A,加密後B,在一樣的設置下,輸入B一定會輸出A。
 

下面我實現的是簡化版的,沒有插線板(如果加上去也是很簡單的,只需要替換指定的字母就可以了,這裡為了簡潔就不添加了)

#include 
#include 
using namespace std;

string Enigma(string input){
    int code;
    int n[6] = {24,2,5,4,10,23};  //定義6個轉子
    int nsize=6;
    string output;
    for (int i = 0; i < input.size();i++)
    {
        if(input[i]==' '){output+=' ';continue;}
        code = input[i]-'a';
        for (int j = 0; j < nsize;j++)
        {
            code = (code + n[j]) % 26;
        }

        if(code%2==0)   code++;else code--;  //反射器如果偶數+1,奇數-1,反射器只要能實現字母兩兩配對就可以了。

        for (int j = nsize-1; j >=0;j--)
        {
            code = code - n[j];
            if(code<0)code=26+code;
        }

        n[0]++;
        for (int j = 0; j < nsize-1; j++)
        {
            if (n[j]>=26)
            {
                n[j + 1]++;
                n[j] = 0;
            }
        }
        n[nsize-1] = n[nsize-1] % 26;
        output += code+'a';
    }
    return output;

}


int main()
{
string text=hey hey  helloworld;
string miwen=Enigma(text);
cout <<密文:<< miwen<< endl;
cout <<明文:<< Enigma(miwen) << endl;
return 0;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved