建议和反馈

请填写你的反馈内容

问答 > 密码学 > 问答详情
已解决

如何在WAMP中使用MCRYPT_ARCFOUR进行加密?10LK

我正在尝试在我的PHP代码中使用ARCFOUR算法:

$td = mcrypt_module_open(MCRYPT_ARCFOUR, '', MCRYPT_MODE_CBC, '');
$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
mcrypt_generic_init($td, $key, $iv);
$output = mcrypt_generic($td, $input);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);

问题是第一行返回警告:

mcrypt_module_open(): Could not open encryption module

我的设置:

  • 从php_info()输出:

    命令configure:...“ - with-mcrypt = static”...

    如果我是正确的,这意味着我不需要用于mcrypt扩展的DLL。

    支持的密码: cast-128 gost rijndael-128 twofish arcfour cast-256 loki97 rijndael-192 saferplus wake blowfish-compat des rijndael-256 serpent xtea blowfish enigma rc2 tripledes

  • PHP版本5.3.8

  • Wamp 2.2a(32位)



2019-07-21
0
请先登陆或注册

Rooney2019-07-21

从PHP 5.3.6和5.4.0 RC6开始 , arcfour , wakeenigma mcrypt密码需要使用stream模式 。 它们不会初始化任何其他模式,任何其他密码也不能使用stream模式。

对于早期的PHP版本,这可能也是如此。

演示代码,使用@ present来静音“无法打开模块”警告:

foreach(mcrypt_list_algorithms() as $alg) {
    printf("\n%20s:", $alg);
    foreach(mcrypt_list_modes() as $mode) {
        $mc = @mcrypt_module_open($alg, null, $mode, null);
        if(is_resource($mc)) echo "\t$mode";
        else echo "\t!!FAIL!!:$mode";
    }
}
echo "\n";

演示输出:

        cast-128:   cbc cfb ctr ecb ncfb    nofb    ofb !!FAIL!!:stream
            gost:   cbc cfb ctr ecb ncfb    nofb    ofb !!FAIL!!:stream
    rijndael-128:   cbc cfb ctr ecb ncfb    nofb    ofb !!FAIL!!:stream
         twofish:   cbc cfb ctr ecb ncfb    nofb    ofb !!FAIL!!:stream
         arcfour:   !!FAIL!!:cbc    !!FAIL!!:cfb    !!FAIL!!:ctr    !!FAIL!!:ecb    !!FAIL!!:ncfb   !!FAIL!!:nofb   !!FAIL!!:ofb    stream
        cast-256:   cbc cfb ctr ecb ncfb    nofb    ofb !!FAIL!!:stream
          loki97:   cbc cfb ctr ecb ncfb    nofb    ofb !!FAIL!!:stream
    rijndael-192:   cbc cfb ctr ecb ncfb    nofb    ofb !!FAIL!!:stream
       saferplus:   cbc cfb ctr ecb ncfb    nofb    ofb !!FAIL!!:stream
            wake:   !!FAIL!!:cbc    !!FAIL!!:cfb    !!FAIL!!:ctr    !!FAIL!!:ecb    !!FAIL!!:ncfb   !!FAIL!!:nofb   !!FAIL!!:ofb    stream
 blowfish-compat:   cbc cfb ctr ecb ncfb    nofb    ofb !!FAIL!!:stream
             des:   cbc cfb ctr ecb ncfb    nofb    ofb !!FAIL!!:stream
    rijndael-256:   cbc cfb ctr ecb ncfb    nofb    ofb !!FAIL!!:stream
         serpent:   cbc cfb ctr ecb ncfb    nofb    ofb !!FAIL!!:stream
            xtea:   cbc cfb ctr ecb ncfb    nofb    ofb !!FAIL!!:stream
        blowfish:   cbc cfb ctr ecb ncfb    nofb    ofb !!FAIL!!:stream
          enigma:   !!FAIL!!:cbc    !!FAIL!!:cfb    !!FAIL!!:ctr    !!FAIL!!:ecb    !!FAIL!!:ncfb   !!FAIL!!:nofb   !!FAIL!!:ofb    stream
             rc2:   cbc cfb ctr ecb ncfb    nofb    ofb !!FAIL!!:stream
       tripledes:   cbc cfb ctr ecb ncfb    nofb    ofb !!FAIL!!:stream

看起来你(和我)正在看到PHP bug 49311 ,它在2009年没有反馈后关闭.RC4 , WAKE和Enigma都被打破了。 用于演示问题的代码:

foreach(mcrypt_list_algorithms() as $algo) {
    echo $algo; 
    $td = mcrypt_module_open($algo, '', MCRYPT_MODE_CBC, '');
    echo "\n";
}

我的系统上的输出,来自PHP交互式提示:

cast-128
gost
rijndael-128
twofish
arcfourPHP Warning:  mcrypt_module_open(): Could not open encryption module in php shell code on line 1
PHP Stack trace:
PHP   1. {main}() php shell code:0
PHP   2. mcrypt_module_open() php shell code:1

cast-256
loki97
rijndael-192
saferplus
wakePHP Warning:  mcrypt_module_open(): Could not open encryption module in php shell code on line 1
PHP Stack trace:
PHP   1. {main}() php shell code:0
PHP   2. mcrypt_module_open() php shell code:1

blowfish-compat
des
rijndael-256
serpent
xtea
blowfish
enigmaPHP Warning:  mcrypt_module_open(): Could not open encryption module in php shell code on line 1
PHP Stack trace:
PHP   1. {main}() php shell code:0
PHP   2. mcrypt_module_open() php shell code:1

rc2
tripledes

直到(除非)他们修复此错误或找到解决方法,您将需要选择不同的加密算法。


投一票
评论(0)
赞赏(0)
邀请

感谢您的善举,每一次解答会成为新人的灯塔,回答被采纳后获得20算力和相应的LK币奖励