Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从解密和加密的数据中找到RC4密钥?_C_Cryptanalysis_Rc4 Cipher - Fatal编程技术网

如何从解密和加密的数据中找到RC4密钥?

如何从解密和加密的数据中找到RC4密钥?,c,cryptanalysis,rc4-cipher,C,Cryptanalysis,Rc4 Cipher,我在一个文档中进行了一些转储分析,其中显示了一组加密数据,以及由此产生的解密数据。对使用的算法进行了解释(简单RC4)。唯一丢失的信息是用于从加密数据获取到解密数据的密钥 我正在用这个文档材料编写一个自动测试。我可以选择一些自己的密钥并从明文中重新创建加密数据,但我想知道是否有任何简单的密码分析方法来找到用于加密原始数据组的原始密钥 蛮力方法可能是可行的,因为钥匙很小,但我更想知道是否存在更聪明的方法 下面是我当前的C加密代码(使用OpenSSL): 没有。目前还没有有效的RC4开裂方法 你需要

我在一个文档中进行了一些转储分析,其中显示了一组加密数据,以及由此产生的解密数据。对使用的算法进行了解释(简单RC4)。唯一丢失的信息是用于从加密数据获取到解密数据的密钥

我正在用这个文档材料编写一个自动测试。我可以选择一些自己的密钥并从明文中重新创建加密数据,但我想知道是否有任何简单的密码分析方法来找到用于加密原始数据组的原始密钥

蛮力方法可能是可行的,因为钥匙很小,但我更想知道是否存在更聪明的方法

下面是我当前的C加密代码(使用OpenSSL):

  • 没有。目前还没有有效的RC4开裂方法

  • 你需要数百万年的时间来强制使用128位密钥。您可以尝试使用密码列表

  • 没有。目前还没有有效的RC4开裂方法

  • 你需要数百万年的时间来强制使用128位密钥。您可以尝试使用密码列表


  • 蛮力?不过,说真的,加密的全部目的是让这样的东西难以计算。我不清楚。我相信,经过计算证明,很难找到一些未知的明文。在我的例子中,我有加密文本和明文。我不清楚这是同一个问题(但暴力可能确实不是一种选择),这是同一个问题。已知的明文使得某些攻击更容易,但在RC4的情况下,没有已知的此类攻击。对不起,如果你不知道这里的钥匙,你就是索尔。蛮力?不过,说真的,加密的全部目的是让这样的东西难以计算。我不清楚。我相信,经过计算证明,很难找到一些未知的明文。在我的例子中,我有加密文本和明文。我不清楚这是同一个问题(但暴力可能确实不是一种选择),这是同一个问题。已知的明文使得某些攻击更容易,但在RC4的情况下,没有已知的此类攻击。对不起,如果你不知道这里的密钥,你就是索尔。我知道密钥可能是随机数,密码列表不在图片中。但我不确定我要寻找的是真正的RC4破解,因为我已经有了明文(也许是这样,但我仍然对解释原因的指针感兴趣)。如果键是随机的,你就没有机会了。RC4现在没有坏。已知的明文攻击模型也不例外。此外,如果您有一个旧的RC4实现(我认为没有),您可以尝试一个,因为我知道密钥可能是随机数,密码列表是不可能的。但我不确定我要寻找的是真正的RC4破解,因为我已经有了明文(也许是这样,但我仍然对解释原因的指针感兴趣)。如果键是随机的,你就没有机会了。RC4现在没有坏。已知的明文攻击模型也不例外。此外,如果您有一个旧的RC4实现(我认为没有),您可以尝试
    unsigned char source[16] = {
        0xdb, 0xa3, 0x13, 0x30, 0x79, 0xa3, 0xcd, 0x9e,
        0x48, 0xf4, 0x8f, 0x06, 0x37, 0x1b, 0x45, 0xdd};
    unsigned char expected_target[16] = {
        0x00, 0x00, 0x06, 0x00, 0x0e, 0x00, 0x00, 0x00,
        0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66};
    unsigned char target[16] = {};
    unsigned char key[16] = {};
    
    RC4_KEY crypt_key;
    RC4_set_key(&crypt_key, 16, key);
    RC4(&crypt_key, 16, source, target);
    
    printf("key    = [%02x %02x %02x %02x %02x %02x %02x %02x "
                   "- %02x %02x %02x %02x %02x %02x %02x %02x]\n",
        key[0], key[1], key[2], key[3],
        key[4], key[5], key[6], key[7],
        key[8],  key[9], key[10], key[11],
        key[12], key[13], key[14], key[15]);
    
    printf("source = [%02x %02x %02x %02x %02x %02x %02x %02x "
                   "- %02x %02x %02x %02x %02x %02x %02x %02x]\n",
        source[0], source[1], source[2], source[3],
        source[4], source[5], source[6], source[7],  
        source[8], source[9], source[10], source[11],
        source[12], source[13], source[14], source[15]);
    
    printf("target = [%02x %02x %02x %02x %02x %02x %02x %02x "
                   "- %02x %02x %02x %02x %02x %02x %02x %02x]\n",
        target[0], target[1], target[2], target[3],
        target[4], target[5], target[6], target[7],
        target[8], target[9], target[10], target[11],
        target[12], target[13], target[14], target[15]);
    
    printf("expected_target = [%02x %02x %02x %02x %02x %02x %02x %02x "
                            "- %02x %02x %02x %02x %02x %02x %02x %02x]\n",
        expected_target[0], expected_target[1], expected_target[2], expected_target[3],
        expected_target[4], expected_target[5], expected_target[6], expected_target[7],
        expected_target[8], expected_target[9], expected_target[10], expected_target[11],
        expected_target[12], expected_target[13], expected_target[14], expected_target[15]);