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

测试图

posted on 2018-11-20 12:20  dalgleish  阅读(3744)  评论(0编辑  收藏  举报