位移密碼的加密,解密以及暴力破解


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

測試圖


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM