使用暴力破解密钥的仿射密码解密

JHk1821

我想用 解密消息affine_algorithm,但从一开始就不知道密钥,我需要对它们进行暴力破解才能找到正确的组合。在下面的代码中,解密的消息不正确,为了理解它,它们没有任何意义。我认为仿射方程是错误的,我看到了其他一些代码,a_inverse但我不知道如何在不知道密钥的情况下对它们进行暴力破解。

#include<iostream>
#include<string.h>
#include<stdlib.h>
#include <string>
#include <fstream>
using namespace std;

int main(int argc, char **argv)
{
    ifstream myfile("C:\\encr_affine.txt");
    string Ciphertext;

    while (myfile>>Ciphertext)
    {
        getline(myfile, Ciphertext);
    }

    for (int b = 1; b <= 25; b++)
    {

        for (int a = 1; a <= 25; a = a + 2)
        {
            if (a == 13)
                a = 15;

            string Msg = "";

            for (int i = 0; i < Ciphertext.length(); i++)
            {

                if (Ciphertext[i] != ' ')
                    Msg = Msg + (char)(((a * ((Ciphertext[i] - 'A' + b)) % 26)) + 'A');
                else
                    Msg += Ciphertext[i];
            }

            cout << "\n Key is : " << a << ", " << b << endl;
            cout << "Decr. message is : " << Msg << endl;

        }
    }
myfile.close();

}
JHk1821

一段时间后,我找到了解决方案。我改变了文件读取:

while (getline(myfile, Ciphertext))
    {
                //reading the ciphertext from the file
    }

我添加了 a_inverse 方程:

for (int b = 1; b <= 25; b++)
    {

        for (int a = 1; a <= 25; a = a + 2)
        {
            if (a == 13)    //codition for only 12 a_keys
                a = 15;

            string Msg = "";
            int a_inv = 0;
            int flag = 0;

            for (int i = 0; i < 26; i++)
            {
                flag = (a * i) % 26;
                //Applying decryption formula a^-1
                //Check if (a*i)%26 == 1 ,then i will be the multiplicative inverse of a
                if (flag == 1)
                {
                    a_inv = i;
                }
            }

            for (int i = 0; i < Ciphertext.length(); i++)
            {
                toupper(Ciphertext[i]);

                if (Ciphertext[i] != ' ')       //if its "space" do your job!
                    Msg = Msg + (char)(((a_inv * ((Ciphertext[i] + 'A' - b)) % 26)) + 'A'); //affine equation 
                else
                    Msg += Ciphertext[i];       //if its "space" , let it!
            }

            cout << "\n Key is : " << a << ", " << b << endl;            //print keys and decrepted message
            cout << "Decr. message is : " << Msg << endl;

        }
    }

myfile.close();

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用for循环暴力破解密码

来自分类Dev

尝试暴力破解密钥时出现内存错误

来自分类Dev

如何在JAVA中编写仿射密码解密逻辑?

来自分类Dev

Java Caesars密码暴力破解

来自分类Dev

暴力破解文件密码测试

来自分类Dev

谁在尝试暴力破解我的密码?

来自分类Dev

如何暴力破解 RSA 私钥的密码?

来自分类Dev

如何多线程暴力破解Java密码程序

来自分类Dev

根据过去的密码创建暴力破解“配置文件”

来自分类Dev

Python FTP暴力破解

来自分类Dev

Python FTP暴力破解

来自分类Dev

使用Node和Express JS防止暴力破解

来自分类Dev

使用ASIC暴力破解MD5

来自分类Dev

如何使用 Python 通过暴力破解提取 .zip 文件

来自分类Dev

使用多个密码解密

来自分类Dev

使用多个密码解密

来自分类Dev

运行密钥密码解密知道密钥吗?

来自分类Dev

Canoga-Perkins密码恢复(通过COM端口强制暴力破解)

来自分类Dev

fail2ban无法捕获SMTP密码暴力破解

来自分类Dev

我如何整理忘记的密码以尝试对其进行暴力破解

来自分类Dev

如何用暴力破解算术难题?

来自分类Dev

简单的暴力破解无法正常工作

来自分类Dev

最近对暴力破解算法-基本操作

来自分类Dev

PF不停止暴力破解尝试

来自分类Dev

暴力破解 bash 输入的 Python 脚本

来自分类Dev

给定哈希值和盐值,使用DES算法破解密码

来自分类Dev

Python Caesar密码问题以高密钥解密

来自分类Dev

了解密码破解器的工作方式

来自分类Dev

对列运行暴力破解,以使用VBA识别值是否跨越点