Home > Backend Development > PHP Tutorial > PHP AES加密学习札记

PHP AES加密学习札记

WBOY
Release: 2016-06-13 13:07:29
Original
867 people have browsed it

PHP AES加密学习笔记

?

?

<?php //--------第一种AES-CBC加密方案--------  
//仅为理解之用  
$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, ''); #128位 = 16字节 iv必须16字节  
$key128 = '1234567890123456';  
$iv =  '1234567890123456';  
$cleartext = 'hello'; #待加密的字符串  
if (mcrypt_generic_init($cipher, $key128, $iv) != -1)  
{  
    // PHP pads with NULL bytes if $cleartext is not a multiple of the block size..  
    //如果$cleartext不是128位也就是16字节的倍数,补充NULL字符满足这个条件,返回的结果的长度一样  
    $cipherText = mcrypt_generic($cipher,$cleartext );  
    mcrypt_generic_deinit($cipher);  
      
    // Display the result in hex.  
    //很明显,结果也是16字节的倍数.1个字节用两位16进制表示,所以下面输出的是32的倍数位16进制的字符串   
    echo '第一种AES加密方案:<br>';  
    printf("128-bit encrypted result:\n%s\n\n",bin2hex($cipherText));  
    echo '<br>';echo '<br>';  
}  
//--------第一种AES加密方案--------  
?> 
Copy after login
转载来源:http://www.chilkatsoft.com/p/php_aes.asp http://www.cnblogs.com/adylee/archive/2007/09/14/893438.html 转载来源:http://blog.csdn.net/shushengsky/archive/2009/12/13/4961861.aspx
<?php //--------第二种AES-ECB加密方案--------  
//加密  
echo '第二种AES加密方案:<br>';  
$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%s\n\n",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
<pre lang="php">
<?php //--------第三种AES-ECB加密方案--------  
echo '第三种AES加密方案:<br>';  
$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);  
//--------第三种AES加密方案--------  
?>

#KEY长度无限制,IV长度必须是block_size的倍数
#如果是MCRYPT_MODE_ECB加密,结果与KEY有关,与IV无关
#如果是MCRYPT_MODE_CBC加密,结果与KEY有关,与IV有关
Copy after login
?

?

?

?

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template