Home  >  Article  >  Backend Development  >  Solution to PHP encryption 3DES error Call to undefined function: mcrypt_module_open(), mcryptmoduleopen_PHP tutorial

Solution to PHP encryption 3DES error Call to undefined function: mcrypt_module_open(), mcryptmoduleopen_PHP tutorial

WBOY
WBOYOriginal
2016-07-12 08:54:271428browse

Solution to PHP encryption 3DES error Call to undefined function: mcrypt_module_open(), mcryptmoduleopen

I am also a newbie in PHP. I learned about the basic principles of php through w3cschool and started writing. . But still a rookie.

Regardless of whether the 3DES encryption method is correct or not, the methods are all online. When running, an error was reported, which killed the little brother. After much searching, I finally found a way.

<?<span>php

</span><span>/*</span><span>*
* 
* PHP版3DES加解密类
*
* 可与java的3DES(DESede)加密方式兼容
*
* @Author: Luo Hui (farmer.luo at gmail.com)
*
* @version: V0.1 2008.12.04
*
</span><span>*/</span>


<span>class</span><span> Crypt3Des
{    
    </span><span>public</span> <span>$key</span>    = "01234567890123456789012345678912"<span>;
    </span><span>public</span> <span>$iv</span>    = "23456789"; <span>//</span><span>like java: private static byte[] myIV = { 50, 51, 52, 53, 54, 55, 56, 57 };
    
    //加密</span>
    <span>public</span> <span>function</span> encrypt(<span>$input</span><span>)
    {
        </span><span>$input</span> = <span>$this</span>->padding( <span>$input</span><span> );
        </span><span>$key</span> = <span>base64_decode</span>(<span>$this</span>-><span>key</span><span>);
        </span><span>$td</span> = mcrypt_module_open( MCRYPT_3DES, '', MCRYPT_MODE_CBC, ''<span>);
        </span><span>//</span><span>使用MCRYPT_3DES算法,cbc模式</span>
        mcrypt_generic_init(<span>$td</span>, <span>$key</span>, <span>$this</span>-><span>iv);
        </span><span>//</span><span>初始处理</span>
        <span>$data</span> = mcrypt_generic(<span>$td</span>, <span>$input</span><span>);
        </span><span>//</span><span>加密</span>
        mcrypt_generic_deinit(<span>$td</span><span>);
        </span><span>//</span><span>结束</span>
        mcrypt_module_close(<span>$td</span><span>);
        </span><span>$data</span> = <span>$this</span>->removeBR(<span>base64_encode</span>(<span>$data</span><span>));
        </span><span>return</span> <span>$data</span><span>;
    }
    
    </span><span>//</span><span>解密</span>
    <span>public</span> <span>function</span> decrypt(<span>$encrypted</span><span>)
    {
        </span><span>$encrypted</span> = <span>base64_decode</span>(<span>$encrypted</span><span>);
        </span><span>$key</span> = <span>base64_decode</span>(<span>$this</span>-><span>key</span><span>);
        </span><span>$td</span> = mcrypt_module_open( MCRYPT_3DES,'',MCRYPT_MODE_CBC,''<span>);
        </span><span>//</span><span>使用MCRYPT_3DES算法,cbc模式</span>
        mcrypt_generic_init(<span>$td</span>, <span>$key</span>, <span>$this</span>-><span>iv);
        </span><span>//</span><span>初始处理</span>
        <span>$decrypted</span> = mdecrypt_generic(<span>$td</span>, <span>$encrypted</span><span>);
        </span><span>//</span><span>解密</span>
        mcrypt_generic_deinit(<span>$td</span><span>);
        </span><span>//</span><span>结束</span>
        mcrypt_module_close(<span>$td</span><span>);
        </span><span>$decrypted</span> = <span>$this</span>->removePadding(<span>$decrypted</span><span>);
        </span><span>return</span> <span>$decrypted</span><span>;
    }
    
    </span><span>//</span><span>填充密码,填充至8的倍数</span>
    <span>public</span> <span>function</span> padding( <span>$str</span><span> )
    {
        </span><span>$len</span> = 8 - <span>strlen</span>( <span>$str</span> ) % 8<span>;
        </span><span>for</span> ( <span>$i</span> = 0; <span>$i</span> < <span>$len</span>; <span>$i</span>++<span> )
        {
            </span><span>$str</span> .= <span>chr</span>( 0<span> );
        }
        </span><span>return</span> <span>$str</span><span> ;
    }
    
    </span><span>//</span><span>删除填充符</span>
    <span>public</span> <span>function</span> removePadding( <span>$str</span><span> )
    {
        </span><span>$len</span> = <span>strlen</span>( <span>$str</span><span> );
        </span><span>$newstr</span> = ""<span>;
        </span><span>$str</span> = <span>str_split</span>(<span>$str</span><span>);
        </span><span>for</span> (<span>$i</span> = 0; <span>$i</span> < <span>$len</span>; <span>$i</span>++<span> )
        {
            </span><span>if</span> (<span>$str</span>[<span>$i</span>] != <span>chr</span>( 0<span> ))
            {
                </span><span>$newstr</span> .= <span>$str</span>[<span>$i</span><span>];
            }
        }
        </span><span>return</span> <span>$newstr</span><span>;
    }
    
    </span><span>//</span><span>删除回车和换行</span>
    <span>public</span> <span>function</span> removeBR( <span>$str</span><span> ) 
    {
        </span><span>$len</span> = <span>strlen</span>( <span>$str</span><span> );
        </span><span>$newstr</span> = ""<span>;
        </span><span>$str</span> = <span>str_split</span>(<span>$str</span><span>);
        </span><span>for</span> (<span>$i</span> = 0; <span>$i</span> < <span>$len</span>; <span>$i</span>++<span> )
        {
            </span><span>if</span> (<span>$str</span>[<span>$i</span>] != '\n' and <span>$str</span>[<span>$i</span>] != '\r'<span>)
            {
                </span><span>$newstr</span> .= <span>$str</span>[<span>$i</span><span>];
            }
        }
    
        </span><span>return</span> <span>$newstr</span><span>;
    }

}

</span><span>//</span><span>test</span>
<span>$input</span> = "1qaz2ws"<span>;
</span><span>echo</span> "plainText:" . <span>$input</span>."<br/>"<span>;
</span><span>$crypt</span> = <span>new</span><span> Crypt3Des();
</span><span>echo</span> "Encode:".<span>$crypt</span>->encrypt(<span>$input</span>)."<br/>"<span>;
</span><span>echo</span> "Decode:".<span>$crypt</span>->decrypt(<span>$crypt</span>->encrypt(<span>$input</span><span>));
</span>?>

You don’t have to look at the code, just look at the sentence inside: $td = mcrypt_module_open( MCRYPT_3DES, '', MCRYPT_MODE_CBC, ''); He was the one who reported the error.

I searched for a lot of solutions, the correct method should be (only for Windows system):

This error occurs when using the function mcrypt_module_open for decryption when libmcrypt.dll is missing on the server side running php.
Make the following settings on the server to solve the problem.

Go to the Internet to download a PHP mcrypt module installation package, you only need the libmcrypt.dll file (usually downloaded from the official website, already in the PHP directory)

1. Copy libmcrypt.dll to the system32 directory or the extensions directory in the php installation directory
2. Copy libmcrypt.dll to the bin directory of the apache installation directory
3. to windows Find the php.ini file in the directory and open it
4. Find; Directory in which the loadable extensions (modules) reside.
extension_dir = "./" For example: extension_dir = "D:php5ext"
For these two lines, make sure that libmcrypt.dll can be found in the directory pointed by extension_dir, or there is libmcrypt.dll in the system path
5. Find the line "extension=php_mcrypt.dll" under the "Windows Extensions" item and "extension" =php_iconv.dll (I don’t have it, so I omitted it). Remove the semicolon in front of these two lines

ps: I just started looking at the solutions online. Some said to modify php.ini in the php installation directory, but it was useless after modification. Be sure to modify php.ini in the windows directory!

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/1120376.htmlTechArticleSolution to PHP encryption 3DES error Call to undefined function: mcrypt_module_open(), mcryptmoduleopen I am also new to PHP, through w3cschool After understanding the basic principles of php, I started...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn