简介

Warning

本扩展从 PHP 7.1.0 开始废弃;自 PHP 7.2.0 起,会移到 PECL。

本扩展是 mcrypt 库的接口,mcrypt 库提供了对多种块算法的支持, 包括:DES,TripleDES,Blowfish (默认), 3-WAY,SAFER-SK64,SAFER-SK128,TWOFISH,TEA,RC2 以及 GOST,并且支持 CBC,OFB,CFB 和 ECB 密码模式。 甚至,它还支持诸如 RC6 和 IDEA 这两种"非免费"的算法。 默认情况下,CFB/OFB 是 8 比特的。

User Contributed Notes

enclaved 10-Aug-2017 11:36
Avoiding mcrypt is only half of the advice. The other half: NEVER do crypto in PHP in the first place! It is a very sloppy and most likely insecure enterprise. If you think you need PHP-based crypto to do something, then be advised that this fact is an alarming signal that something about your application design is very wrong. PHP is neither the right tool nor the right environment for cryptography. Just remember this single rule of thumb: cryptographic secrets must never cross subsystem/layer boundaries:

    Database <-- ! --> CGI program <-- ! --> HTTP server

Cryptographic tasks are performed either by the HTTP server (e.g. authentication of users with client SSL certificates) or the RDBMS (e.g. password-based access to data), and these tasks must be ENCAPSULATED inside the facility, self-contained. For example, if you store KDF-derived digests of passwords in an SQL database, you must NOT compare digests in PHP, but only in SQL queries or stored procedures. Once produced and put into the database, a password digest (or any other sensitive data) must not exit it in any way as-is, be it a SELECT query or some other way, that is considered a leak in the cryptosystem. Use ONLY database-provided means to perform any crypto operations.

As PostgreSQL is the usual database of choice for technically advanced and sound WWW or intranet sites, my advice is to use its pgcrypto extension, it is mature, well-tested, and has all the right tools. Here's a textbook password handling example to illustrate how secrets can be confined within the database layer without extracting them into the PHP layer. Password digest derivation and storing:

    INSERT INTO account (digest) VALUES (crypt('password', gen_salt('bf'));

Verification:

    SELECT digest = crypt('password', gen_salt(digest)) FROM account;

Exceptionally simple, elegant, clean, and secure (Blowfish is more than enough for user-set passwords), isn't it? And the best part about it: no PHP involved in crypto!
info at neutrosolutions dot com 05-May-2017 04:07
On AWS Amazon Linux if you are using php 7.0.X version
then please use this command to install mcrypt library.

[ec2-user@12.123.123.123 ~] sudo yum install php70-mcrypt
remi at php dot net 07-Jul-2015 04:18
This extension rely in libmcrypt which is dead, unmaintained since 2007.

Please don't rely on it, consider switching to well maintained alternatives (openssl, crypt, password hashing functions, phpseclib, password_compat...)
c dot light93 at gmail dot com 25-May-2015 05:04
if you get a "The mcrypt extension is missing" alert somewhere, use
"sudo php5enmod mcrypt" and restart your server to enable it.