PHP加密-AES
阿新 • • 發佈:2020-12-24
AES是Advanced Encryption Standard(高階加密標準)的縮寫,在密碼學中又稱Rijndael加密發,是美國聯邦政府採用的一種區塊加密標準。
在PHP的mcrypt擴充套件中,rijndael-128、rijndael-192、rijndael-256就是AES加密,三種分別使用不同的資料塊和密碼長度進行加密
在AES的ECB模式中,一般是16位元組為一塊,然後對這一整塊進行加密,如果輸入字元不夠16位元組,就需要補位
AES-ECS方式進行加密資料程式碼如下:
$auth_key = "safe_key";
$salt = '!@#$%';
$content = "hello world";
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');
$iv_size = mcrypt_enc_get_iv_size($td);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$key_size = mcrypt_enc_get_key_size($td);
$key = substr(md5($auth_key.$salt), 0, $key_size);
mcrypt_generic_init( $td, $key, $iv);
$block = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
$pad = $block - (strlen($content) % $block);
$content .= str_repeat(chr($pad), $pad); // 補齊不足16位元組的位數內容
$secret = mcrypt_generic($td, $content);
echo bin2hex($secret);
mcrypt_generic_deinit($td );
mcrypt_module_close($td);
AES-ECS方式進行解密資料程式碼如下:
$auth_key = "safe_key";
$salt = '!@#$%';
$secret = "d639e78sf4b43rfer243t4t43tre";
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');
$iv_size = mcrypt_enc_get_iv_size($td);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$key_size = mcrypt_enc_get_key_size($td);
$key = substr(md5($auth_key.$salt), 0, $key_size);
mcrypt_generic_init($td, $key, $iv);
$content = mdecrypt_generic($td, hex2bin($secret));
$len = strlen($content);
$ch = ord($content[$len - 1]);
echo substr($content, 0, $len - $ch);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);