今天咱们来学习的是 PHP 中的一个过时的扩展 Mcrypt 。在 PHP7 之前,这个扩展是随 PHP 安装包一块内置发布的,然则此刻新版本的 PHP 中已然无了,必须运用这个扩展的话咱们必须单独安装,并且在运用的时候亦是会报出过时的警告的。因此,咱们学习运用这些函数的时候,就必须运用 @ 来抑制错误信息。当然,之因此会对这套扩展发出过时警告,是由于 PHP 更加举荐运用 OpenSSL 来处理类似的加密能力。
模块和算法
Mcrypt 重点是运用的 Mcrypt 工具来进行加密操作的,因此在 CentOS 或其它操作系统中,咱们必须安装 libmcrypt-devel 来运用这个扩展。倘若 yum 中没法安装的话,直接更新 yum 源就可。
Mcrypt 包括非常多的模块和算法。算法就不消多解释了,便是用来对数据进行加密的方式。而模块,包含 CBC, OFB,CFB 和 ECB 这几种,是一系列的分组、流式加密的模式,有举荐的模块,亦有安全的模块,详细的区分大众能够自动查阅关联的资料,这里咱们先看一下咱们的环境中所支持的模块和算法。
$algorithms = @mcrypt_list_algorithms();
print_r($algorithms);
// Array
// (
// [0] => cast-128
// [1] => gost
// [2] => rijndael-128
// [3] => twofish
// [4] => arcfour
// [5] => cast-256
// [6] => loki97
// [7] => rijndael-192
// [8] => saferplus
// [9] => wake
// [10] => blowfish-compat
// [11] => des
// [12] => rijndael-256
// [13] => serpent
// [14] => xtea
// [15] => blowfish
// [16] => enigma
// [17] => rc2
// [18] => tripledes
// )
$modes = @mcrypt_list_modes();
print_r($modes);
// Array
// (
// [0] => cbc
// [1] => cfb
// [2] => ctr
// [3] => ecb
// [4] => ncfb
// [5] => nofb
// [6] => ofb
// [7] => stream
// )
mcrypt_list_algorithms() 函数能够得到当前环境下所有支持的 Mcrypt 算法。而 mcrypt_list_modes() 则打印出了当前环境下所有可支持的模块。重视在某些版本的 PHP 或某些系统中,这些内容会有所区别,在运用 Mcrypt 关联的加密能力的时候,这两项都是相互协同运用的。因此呢,咱们有必要在必须运行 Mcrypt 的环境中预先确定好当前环境下所支持的模块和算法。
加密解密数据
$key = hash(sha256, secret key, true);
$input = json_encode([id=>1, data=>Test mcrypt!]);
$td = @mcrypt_module_open(rijndael-128, , cbc, );
$iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_URA
|