php aes加密 控制加密长度,如何在PHP中使用AES加密算法加密数据

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

2bc5f40c05d1f9ecde6967b2512a3471.png

下面就是在PHP中使用AES对数据加密

AES-CBC 加密方案

$privateKey = "1234567812345678";

$iv = "1234567812345678";

$data = "Test String";

//加密

$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $privateKey, $data, MCRYPT_MODE_CBC, $iv);

echo(base64_encode($encrypted));

echo "
";

//解密

$encryptedData = base64_decode("2fbwW9+8vPId2/foafZq6Q==");

$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $privateKey, $encryptedData, MCRYPT_MODE_CBC, $iv);

echo($decrypted);

?>

AES-ECB加密方案

//加密

$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)."
";

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

}

//解密

$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("
");

print(bin2hex($p_t));

echo "
";

}

//将$text补足$padlen倍数的长度

function pad2Length($text, $padlen){

$len = strlen($text)%$padlen;

$res = $text;

$span = $padlen-$len;

for($i=0; $i

$res .= chr($span);

}

return $res;

}

//将解密后多余的长度去掉(因为在加密的时候 补充长度满足block_size的长度)

function trimEnd($text){

$len = strlen($text);

$c = $text[$len-1];

if(ord($c)

for($i=$len-ord($c); $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

{

$bin.=chr(hexdec($hex[$i].$hex[$i+1]));

}

return $bin;

}

AES-ECB加密方案

$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."
";

$jiemi = mcrypt_decrypt(MCRYPT_RIJNDAEL_128,$key,hexToStr($AESed),MCRYPT_MODE_ECB,$iv); #解密

echo "解密:";

echo trimEnd($jiemi);

?>

以上只是我列出的简单的3种加密方法,事实上还有很多中方法,需要我们不断的学习。密码学的道路还任重而道远。

如何在PHP中使用AES加密算法加密数据相关教程

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值