`
willeager
  • 浏览: 95183 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

PHP AES加密学习笔记

    博客分类:
  • PHP
阅读更多

 

 

<?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加密方案--------  
?> 
</pre>
转载来源: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
<pre lang="php">
<?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<$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加密方案--------  
</pre>
<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有关
 

 

 

 

分享到:
评论

相关推荐

    AES加密算法学习笔记+代码

    本人学习AES加密算法所写的学习笔记,同时还包括了本人学习过程中用Python语言编写的AES加密程序,该程序不考虑效率,为了便于学习,完全按照文档描述的过程来实现,并编写了大量注释。 另外附一个从网上下载的C++...

    AES加密的原理的说明报告,非常详细,利于了解和学习AES加密

    报告很详细,清晰的描述了AES的原理和优势,指出AES和其他加密的特点,对于密码学的人和想实现AES加密用代码实现的人很有帮助,我仔细的读过很多遍啦,不错!

    jquery实现aes加密,后端php解密

    在网络安全领域,数据加密是确保信息安全传输的重要手段。在这个场景中,我们讨论的是前端使用jQuery配合crypto-js库...通过对这些资源的深入学习和实践,可以更好地理解和应用这个前端jQuery加密、后端PHP解密的方案。

    Delphi.rar_AES_AES加密_delphi AES加密_delphi 加解密_java delphi aes

    本资源"Delphi.rar_AES_AES加密_delphi AES加密_delphi 加解密_java delphi aes"提供的是在Delphi编程环境中实现AES加密和解密的示例代码,其目标是与Java平台上的加解密过程保持兼容。 首先,让我们深入了解一下...

    php+uni-app AES加密解密.rar

    下面我们将深入探讨PHP和uni-app如何实现AES加密解密。 1. PHP的AES加密解密: PHP提供了多种库来实现AES加密,其中最常用的是`openssl_encrypt`和`openssl_decrypt`函数。这两个函数支持多种加密模式,包括AES-...

    aes加密算法delphi

    ### AES加密算法在Delphi中的实现 AES(Advanced Encryption Standard,高级加密标准)是一种对称加密算法,被广泛应用于数据安全领域。它采用固定的数据块大小(128位),支持128、192或256位密钥长度。在Delphi中...

    java AES加密 解决加密过长非法异常问题

    在Java编程语言中,AES(Advanced Encryption Standard)是一种广泛应用的对称加密算法,用于保护数据的安全性。在处理加密过程中,可能会遇到“非法参数”异常,这通常是因为输入数据长度不符合AES加密的要求。AES...

    AES加密软件 AES加密软件

    AES加密软件,全称为“高级加密标准”(Advanced Encryption Standard),是目前广泛应用的对称加密算法,用于保护敏感数据的安全。AES是由比利时密码学家Joan Daemen和Vincent Rijmen设计的,取代了之前的DES(Data...

    新建 WinRAR 压缩文件.rar_AES_AES 加密_STM32 aes加密

    通过集成和理解这些文件,开发者可以学习和应用AES加密技术,确保其嵌入式系统数据的安全传输和存储,提升系统整体的安全性能。在实际项目中,可能还需要考虑密钥管理、安全初始化、错误处理以及性能优化等附加问题...

    QT 实现AES 加密算法

    在QT中实现AES(Advanced Encryption Standard)加密算法,可以帮助开发者确保数据的安全性,防止未授权的访问和篡改。AES是目前国际上广泛采用的一种块密码标准,因其高效性和安全性而备受推崇。 AES加密算法基于...

    PHP实现AES加密.doc

    PHP 实现 AES 加密 AES(Advanced Encryption Standard),是一种对称加密算法,用于保护数据的机密性和完整性。PHP 作为一种服务器端脚本语言,需要实现 AES 加密以确保数据的安全性。本文档介绍了如何使用 PHP ...

    AES加密算法Dll

    AES加密算法Dll是一个用于在项目中实现AES加密功能的动态链接库(Dll)文件。AES,全称为“高级加密标准”(Advanced Encryption Standard),是一种广泛应用于数据加密的标准算法,尤其在网络安全、数据保护和隐私...

    STM32F103程序AES加密.zip_STM32 AES加密_aes stm32f103_stm32f103 硬件aes_

    通过分析这个例程,我们可以学习如何配置硬件AES模块,设置密钥,以及如何进行数据的加密和解密操作。以下是一些关键知识点: 1. **初始化硬件AES**:在使用AES功能之前,需要通过HAL库或LL库(Low Layer Library)...

    c++ AES加密.zip

    AES(Advanced Encryption Standard)是一种...综上所述,这个资源提供了C++环境下使用AES加密的实例,涵盖了从库的构建到实际应用的全过程,对于学习和理解AES加密技术以及在C++中如何实现和测试加密功能非常有价值。

    Qt实现AES加密解密

    这个程序应当包含了上述知识点的具体应用,你可以通过阅读源代码、编译和运行来进一步理解和学习AES加密解密的实现细节。这个实战例程可以帮助开发者更好地掌握Qt环境下的加密解密操作,提高数据安全保护能力。

    VB6-AES加密算法源码.rar

    开发者可以借此学习AES加密的基本原理和实现细节,也可以直接利用源码中的函数进行加密和解密操作,简化开发流程。 总的来说,这个VB6-AES加密算法源码是一个实用的工具,涵盖了AES加密的核心功能,并提供了多种...

    AES加密算法 Delphi7

    AES加密算法,全称为Advanced Encryption Standard,是一种广泛应用的对称加密算法,因其高效性和安全性而备受推崇。在Delphi7这个古老的编程环境中,实现AES加密同样是非常重要的,特别是在保护数据安全、实现通信...

    java,php,GOLang,JavaScript,AES加密解密代码互通

    本主题聚焦于四种常用编程语言——Java、PHP、GOLang(Go语言)和JavaScript——之间的AES(Advanced Encryption Standard)ECB(Electronic Codebook)模式128位加密解密的互操作性。下面我们将详细探讨这些语言...

    本地图片AES加密解密

    AES(Advanced Encryption Standard)加密是一种广泛应用的对称加密算法,因其高效和安全性而备受青睐。 AES加密工作原理: AES加密基于替换和置换两种基本操作,它通过一系列的混淆和扩散过程来确保数据的安全性。...

    数据aes加密sbox

    ### 数据AES加密SBox知识点详解 #### 一、AES加密简介 高级加密标准(Advanced Encryption Standard,AES)是一种对称密钥加密技术,用于保护电子数据的安全。...理解和掌握S盒对于深入学习AES加密算法至关重要。

Global site tag (gtag.js) - Google Analytics