1. 程式人生 > 實用技巧 >PHP加密-AES

PHP加密-AES

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);