zoukankan      html  css  js  c++  java
  • 位移密码的加密,解密以及暴力破解

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

    测试图

  • 相关阅读:
    ###STL学习--标准模板库
    打包C#程序
    ###学习《Effective C++》
    [ZJOI2007]棋盘制作
    [NOI2012]美食节
    [SCOI2012]奇怪的游戏
    5120: [2017国家集训队测试]无限之环
    序列取数
    1028: [JSOI2007]麻将
    1011: [HNOI2008]遥远的行星
  • 原文地址:https://www.cnblogs.com/dalgleish/p/9988181.html
Copyright © 2011-2022 走看看