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); // 结束

 

posted @ 2020-12-23 22:44  将来-小志  阅读(960)  评论(0编辑  收藏  举报