C++ Caesar Cipher encryption

C++ Caesar Cipher encryption

本文关键字:encryption Cipher Caesar C++      更新时间:2023-10-16

任何人都可以解释这组代码如何工作吗?

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字符串中,则将它们更改为另一个随机标点符号,从用户的角度来看,它们无缘无故。