PHP對稱加密-AES加密、DES加密

 

對稱加密

  對稱加密算法是指,數據發信方將明文(原始數據)和密鑰一起經過加密處理後,使其變成複雜的加密密文發送出去。收信方收到密文後,若要解讀原文,則需要使用加密密鑰及相關算法的逆算法對密文進行解密,使其恢復可讀明文。

  優點:算法公開、計算量小、加密速度快、加密效率高,適合於加密大量數據的場合

  常用算法:DES、3DES、TDEA、RC2、RC4、IDEA、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);

 

 

使用DES加密

 

使用DES加密代碼如下

    $auth_key = 'safe_key';
    $salt = '!@#$%';
    $content = 'helloworld';
    $td = mcrypt_module_open(MCRYPT_DES, '', 'ecb', ''); // 使用MCRYPT_DES算法,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);// 初始化
    $secret = mcrypt_generic($td, $content);// 加密並返回加密的內容
    echo base64_encode($secret);
    mcrypt_generic_deinit($td);
    mcrypt_module_close($td); // 結束

 

使用DES解密代碼如下

    $auth_key = 'safe_key';
    $salt = '!@#$%';
    $secret = 'nzPa0jPaaNca+Yty/HG4PA==';
    $td = mcrypt_module_open(MCRYPT_DES, '', 'ecb', ''); // 使用MCRYPT_DES算法,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, base64_encode($secret)); // 解密並返回內容
    echo $content;
    mcrypt_generic_deinit($td);
    mcrypt_module_close($td); // 結束

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章