仿射密码c++加解密
时间: 2024-09-27 10:15:37 浏览: 81
仿射密码是一种简单的替换加密算法,在C++中实现加解密的过程如下:
**加密过程**:
1. 定义两个整数a和b作为密钥,通常它们满足(a * b) % 26 = 1(因为字母表只有26个字符)。例如,a=5, b=7。
2. 将明文(每个字母表示为ASCII码减去'A'或'a'的值,范围为0-25)乘以a,然后加上b,结果对26取模,得到密文的ASCII码。
3. 转换回字母形式,如果超出A-Z或a-z的范围,则循环回到开始。
**解密过程**:
1. 使用同样的a和b,将密文的ASCII码减去b,然后除以a并取余数,得到的余数对应明文字母的原始位置。
2. 再次转换回字母形式。
以下是简单的C++代码示例:
```cpp
#include <iostream>
using namespace std;
char encryptAffine(char c, int a, int b) {
c = (a * (c - 'A') + b) % 26 + 'A';
return c;
}
char decryptAffine(char c, int a, int b) {
c = (char)(((c - 'A') - b) * (int)a) % 26 + 'A';
return c;
}
int main() {
int a = 5, b = 7; // 示例密钥
string plaintext = "Hello, World!";
string ciphertext;
for (char c : plaintext) {
if ('A' <= c && c <= 'Z') { // 处理大写字母
ciphertext += encryptAffine(c, a, b);
} else if ('a' <= c && c <= 'z') { // 处理小写字母
ciphertext += encryptAffine(c, a, b);
} else {
ciphertext += c; // 非字母字符不变
}
}
cout << "Encrypted message: " << ciphertext << endl;
for (char c : ciphertext) {
if ('A' <= c && c <= 'Z') {
cout << decryptAffine(c, a, b) << " ";
} else if ('a' <= c && c <= 'z') {
cout << decryptAffine(c, a, b) << " ";
} else {
cout << c << " "; // 非字母字符不变
}
}
cout << endl << "Decrypted message: ";
return 0;
}
```
阅读全文