位移算法描述:将某个字节数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; }
测试图