位移算法描述:將某個字節數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; }
測試圖