在PHP中使用AES加密算法加密数据
来源:互联网 发布:东方铃奈庵 知乎 编辑:程序博客网 时间:2024/05/01 08:31
在研究Discuz 的时候,发现Discuz有一套相当完美的加密算法(相对而言)。这个算法可以将数据加密后,储存起来,到需要用的时候,用之前加密的秘钥将之还原。
除了这个之外,还有AES这个算法能够将数据很好的加密起来,在传输过程中不容易被破解。
在PHP中,我们必须先安装好mcrypt这个模块,并且添加相应版本的扩展到php中,详情可以看 不重新编译PHP安装Mcrypt扩展
AES加密模式和填充方式有以下之中,但不是全部
下面就是在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); ?>
以上只是我列出的简单的3种加密方法,事实上还有很多中方法,需要我们不断的学习。密码学的道路还任重而道远。
【声明】本文 在PHP中使用AES加密算法加密数据 为柠之漠然原创文章,转载请注明出自 枫之落叶
并保留本文有效链接:https://blog.shiniv.com/2013/11/use-aes-encryption-algorithm-to-encrypt-data-in-php/ , 转载请保留本声明!
0 0
- 在PHP中使用AES加密算法加密数据
- 在PHP中使用AES加密算法加密数据
- 在PHP中使用AES加密算法加密数据及解密数据
- 在 Java 中使用 AES 加密算法
- 在 Java 中使用 AES 加密算法 .
- [安全] -- 使用AES加密算法进行数据加密和解密
- Java中AES加密算法使用
- [Day]使用AES在php中加密,并用objective-c解密
- android 使用Aes加密数据
- Android 中对称加密算法DES,DESede,AES的加密和解密 的工具类的使用
- Java中使用AES对数据进行加密
- iOS开发中使用AES算法对数据进行加密
- 对称加密算法-AES算法(高级数据加密标准)
- java、android、ios、js数据传递加密算法之AES加密
- AES加密解密(使用php扩展mcrypt实现AES加密)
- AES加密算法在Linux下出现随机加密结果
- 如何在java中使用Aes算法对密码加密
- JAVA中使用AES加密
- Some Laws in IT
- 每天都写点东西出来 -- 第 10 天
- 项目中遇到的问题总结
- Shell 中参数变量$0,$?,$!,$#等的含义
- 01 CSDN心语
- 在PHP中使用AES加密算法加密数据
- 11.晃动事件
- 老王的故事
- 在c++中怎么实现把char实现int形输出
- ARM汇编伪指令介绍(全集)
- 在公司中怎样使用SVN、Git
- hdu 4325 Flowers
- ARM汇编语言中的程序结构
- 嵌入式底层软件开发学习系列之一目录