C++秘钥问题,德军秘钥

二战期间,德军使用一种名为“Enigma”的密码机。这个密码机使用Vigenere密码的原理进行加密,为了简化问题,我们规定加密方式如下:
我们称需要加密的信息为明文,用

M 表示;称加密后的信息为密文,用

C 表示;而密钥是一种参数,是将明文转换为密文或将密文转换为明文的算法中输入的数据,记为

k。 在本题中,密钥

k 是一个字母串,

=

1
,

2
,


,


k=k
1

,k
2

,⋯,k
n

。当明文

=

1
,

2
,


,


M=m
1

,m
2

,⋯,m
n

时,得到的密文

=

1
,

2
,


,


C=c
1

,c
2

,⋯,c
n

,其中


c
i

=


®


m
i

®k
i

,运算
®
® 的规则如下表所示:

img

引用chatGPT作答,C++程序来实现Enigma密码机的加密功能。下面是一个简单的实现:

#include <iostream>
#include <string>

using namespace std;

string encrypt(string plaintext, string key) {
    string ciphertext = "";
    int keyLen = key.length();
    int plaintextLen = plaintext.length();

    for (int i = 0; i < plaintextLen; i++) {
        char c = plaintext[i];
        char k = key[i % keyLen];
        char encrypted = ((c - 'a') + (k - 'a')) % 26 + 'a';
        ciphertext += encrypted;
    }

    return ciphertext;
}

int main() {
    string plaintext, key;
    cout << "Enter the plaintext: ";
    getline(cin, plaintext);
    cout << "Enter the key: ";
    getline(cin, key);
    string ciphertext = encrypt(plaintext, key);
    cout << "The ciphertext is: " << ciphertext << endl;
    return 0;
}

在这个程序中,我们使用了一个encrypt()函数来实现加密功能。它接受两个参数:明文和密钥。首先,我们计算出密钥的长度(keyLen)和明文的长度(plaintextLen)。然后,我们使用for循环遍历明文的每个字符。对于每个字符,我们使用密钥中对应位置的字符来加密它。我们将明文和密钥中对应位置的字符都转换为0-25之间的数字,将它们加起来,然后取模26,最后再加上'a',将它们转换回字符形式。加密后的字符被添加到ciphertext字符串中。最后,我们将加密后的密文返回。

在main()函数中,我们首先提示用户输入明文和密钥。然后,我们调用encrypt()函数来加密明文,并将加密后的密文输出到控制台上。

C++实现DES加密----算法

可以借鉴下
https://blog.csdn.net/Joliph/article/details/80754661