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


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

    测试图

  • 相关阅读:
    移动端前端布局的必看前提
    单词统计
    用户场景分析
    学习进度(九)
    团队项目
    学习进度(二)
    数据可视化
    大二下,学习进度(一)
    求最大子数组的和
    构建之法3
  • 原文地址:https://www.cnblogs.com/dalgleish/p/9988181.html
Copyright © 2020-2023  润新知