位移算法描述:将某个字节数c据向后位移k位,超过字符集最大数m时,则取模
y=(x+k) mod m
解密算法
x=(y-k) mod m
暴力破解思路:尝试所有k,k的范围只在[1, m-1]才有意义
C语言实现
加密函数
void Encrypt(char *txt, int k) {
int len = lstrlenA(txt);
for (int i = 0; i < len; i++)
txt[i] = (txt[i] + k) % 0x7F;
}
解密函数
void Decrypt(char *txt, int k) {
int len = lstrlenA(txt), x;
for (int i = 0; i < len; i++) {
x = (txt[i] - k) % 0x7F;
txt[i] = x >= 0 ? x : x + 0x7F;
}
}
暴力破解函数
void Crack(char *txt) {
int len = lstrlenA(txt) + 1;
char *tmp = new char[len];
for (int k = 1; k < 0x7F; k++) {
memcpy(tmp, txt, len);
Decrypt(tmp, k);
std::cout << "Cracked at " << k << ": " << tmp << std::endl;
}
delete[] tmp;
}
Main函数
int main(){
char szText[200];
std::cout << "Enter text: ";
std::cin.getline(szText, 200);
Encrypt(szText, 17);
std::cout << "Encrypt text: " << szText << std::endl;
Crack(szText);
Decrypt(szText, 17);
std::cout << "Decrypt text: " << szText << std::endl;
}
测试图

