在PHP中使用AES加密算法加密数据

算法/模式/填充 16字节加密后数据长度 不满16字节加密后长度
AES/CBC/NoPadding 16 不支持
AES/CBC/PKCS5Padding 32 16
AES/CBC/ISO10126Padding 32 16
AES/CFB/NoPadding 16 原始数据长度
AES/CFB/PKCS5Padding 32 16
AES/CFB/ISO10126Padding 32 16
AES/ECB/NoPadding 16 不支持
AES/ECB/PKCS5Padding 32 16
AES/ECB/ISO10126Padding 32 16
AES/OFB/NoPadding 16 原始数据长度
AES/OFB/PKCS5Padding 32 16
AES/OFB/ISO10126Padding 32 16
AES/PCBC/NoPadding 16 不支持
AES/PCBC/PKCS5Padding 32 16
AES/PCBC/ISO10126Padding 32 16
下面就是在PHP中使用AES对数据加密

AES-CBC 加密方案
<?php
  $privateKey = "1234567812345678";
  $iv = "1234567812345678";
  $data = "Test String";

  //加密
  $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $privateKey, $data, MCRYPT_MODE_CBC, $iv);
  echo(base64_encode($encrypted));
  echo '<br/>';

  //解密
  $encryptedData = base64_decode("2fbwW9+8vPId2/foafZq6Q==");
  $decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $privateKey, $encryptedData, MCRYPT_MODE_CBC, $iv);
  echo($decrypted);
?>
 
  
 AES-ECB加密方案

<?php 
  //加密 
  $key = '1234567890123456'; 
  $content = 'hello'; 
  $padkey = pad2Length($key,16); 
  $cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, ''); 
  $iv_size = mcrypt_enc_get_iv_size($cipher); 
  $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); #IV自动生成? 
  echo '自动生成iv的长度:'.strlen($iv).'位:'.bin2hex($iv).'<br>'; 
  if (mcrypt_generic_init($cipher, pad2Length($key,16), $iv) != -1) 
  { 
    // PHP pads with NULL bytes if $content is not a multiple of the block size.. 
    $cipherText = mcrypt_generic($cipher,pad2Length($content,16) ); 
    mcrypt_generic_deinit($cipher); 
    mcrypt_module_close($cipher); 

    // Display the result in hex. 
    printf("128-bit encrypted result:n%snn",bin2hex($cipherText)); 
    print("<br />"); 

  } 
  //解密 
  $mw = bin2hex($cipherText); 
  $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, ''); 
  if (mcrypt_generic_init($td, $padkey, $iv) != -1) 
  { 
    $p_t = mdecrypt_generic($td, hexToStr($mw)); 
    mcrypt_generic_deinit($td); 
    mcrypt_module_close($td); 
    $p_t = trimEnd($p_t); 
    echo '解密:'; 
    print($p_t); 
    print("<br />"); 
    print(bin2hex($p_t)); 
    echo '<br><br>'; 
  } 
  //将$text补足$padlen倍数的长度 
  function pad2Length($text, $padlen){ 
    $len = strlen($text)%$padlen; 
    $res = $text; 
    $span = $padlen-$len; 
    for($i=0; $i<$span; $i++){ 
      $res .= chr($span); 
    } 
    return $res; 
  } 
  //将解密后多余的长度去掉(因为在加密的时候 补充长度满足block_size的长度) 
  function trimEnd($text){ 
    $len = strlen($text); 
    $c = $text[$len-1]; 
    if(ord($c) <$len){ 
      for($i=$len-ord($c); $i<$len; $i++){ 
        if($text[$i] != $c){ 
          return $text; 
        } 
      } 
      return substr($text, 0, $len-ord($c)); 
    } 
    return $text; 
  } 
  //16进制的转为2进制字符串 
  function hexToStr($hex) 
  { 
    $bin=""; 
    for($i=0; $i<strlen($hex)-1; $i+=2) 
    { 
      $bin.=chr(hexdec($hex[$i].$hex[$i+1])); 
    } 
    return $bin; 
  } 

AES
-ECB加密方案

<?php 
  $key = '1234567890123456'; 
  $key = pad2Length($key,16); 
  $iv = 'asdff'; 
  $content = 'hello'; 
  $content = pad2Length($content,16); 
  $AESed = bin2hex( mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$key,$content,MCRYPT_MODE_ECB,$iv) ); #加密 
  echo "128-bit encrypted result:".$AESed.'<br>'; 
  $jiemi = mcrypt_decrypt(MCRYPT_RIJNDAEL_128,$key,hexToStr($AESed),MCRYPT_MODE_ECB,$iv); #解密 
  echo '解密:'; 
  echo trimEnd($jiemi); 
?> 
 
 

 

转载于:https://www.cnblogs.com/qhorse/p/8808653.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值