C++ Caesar Cipher encryption
C++ Caesar Cipher encryption
任何人都可以解释这组代码如何工作吗?
string LoginAccess::decryptPass(string pass) {
int count = 0;
while (count < pass.length()) {
if (isalpha(pass[count])) {
//For Caps lock
if (pass[count] > 64 && pass[count] < 91) {
if (pass[count] < 88) {
pass[count] += 3;
} else if (pass[count] == 88) {
pass[count] = 'A';
} else if (pass[count] == 89) {
pass[count] = 'B';
} else
pass[count] = 'C';
//For small char
} else {
if (pass[count] < 120) {
pass[count] += 3;
} else if (pass[count] == 120) {
pass[count] = 'a';
} else if (pass[count] == 121) {
pass[count] = 'b';
} else
pass[count] = 'c';
}
}
count++;
}
return pass;
}
64、91等的数字是什么意思?为什么只设置A,B,C?其余的字母会发生什么?
此函数将字符串 pass
循环,将计数用作数组的索引。该代码正在解码一个Ceasar密码,在该密码中,每个字母都向下移动字母,在这种情况下,三个位置三个位置。
它将当前字符(pass[count]
)与ASCII字符代码进行比较。每个字母和标点符号都有与之相关的数字。您可以在此页面上看到字符图。如您所见,大写字母('a'to'z')跨度为65至90,而小写('a'tha t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t os z')97至122。
因此,代码检查字母是否落在上部还是下情况下。默认情况下,它将向前移动三个空间,但是如果用字母的最后三个字母这样做,那将推向标点符号。因此,对此进行了特殊的代码检查。如果 pass[count]
是88,字符'x',则将其设置为" a",数字65。
代码中有一些弱点,因为它仅支持字母。如果标点符号位于pass
字符串中,则将它们更改为另一个随机标点符号,从用户的角度来看,它们无缘无故。
相关文章:
- 需要Vigenere Cipher程序的帮助
- AES CBC 128 bit encryption -OpenSSL
- 加密给定的文本字符串-Caesar Cipher
- 这里不允许函数定义:void encryption(ifstream encrypt_file,ofstream key
- zlib z_stream with encryption
- C 链接列表Caesar Cipher Vigenere密码
- AES 256 encryption in C++ and Qt 5
- C++ Caesar Cipher encryption
- 在Android NDK中使用C / C++加密(Rijndael Cipher)
- C++ AES Encryption Class
- 我的 cipher() 函数似乎不支持大写字母
- Java and C++ (VS) RSA encryption
- visual RSA Encryption for C++
- Python的M2Crypto.EVP.Cipher无法使用C++加密数据
- C++ Exe Encryption?