在aes秘钥长度固定的情况下,php做aes加密,windows和linux解密的结果不同,谁知道这个是怎么回事吗?

//--------第一种AES-CBC加密方案--------
//仅为理解之用
$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, ''); #128位 = 16字节 iv必须16字节
$key128 = '3456';
$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加密方案--------
转载来源:http://www.chilkatsoft.com/p/php_aes.asp
http://www.cnblogs.com/adylee/archive//893438.html
转载来源:http://blog.csdn.net/shushengsky/archive//4961861.aspx
&pre lang="php"&
//--------第二种AES-ECB加密方案--------
echo '第二种AES加密方案:&br&';
$key = '3456';
$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)%$
$span = $padlen-$
for($i=0; $i&$ $i++){
$res .= chr($span);
//将解密后多余的长度去掉(因为在加密的时候 补充长度满足block_size的长度)
function trimEnd($text){
$len = strlen($text);
$c = $text[$len-1];
if(ord($c) &$len){
for($i=$len-ord($c); $i&$ $i++){
if($text[$i] != $c){
return substr($text, 0, $len-ord($c));
//16进制的转为2进制字符串
function hexToStr($hex)
for($i=0; $i&strlen($hex)-1; $i+=2)
$bin.=chr(hexdec($hex[$i].$hex[$i+1]));
//--------第二种AES加密方案--------
&pre lang="php"&
//--------第三种AES-ECB加密方案--------
echo '第三种AES加密方案:&br&';
$key = '3456';
$key = pad2Length($key,16);
$iv = 'asdff';
$content = 'hello';
$content = pad2Length($content,16);
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加密/解密方案 CBC模式,128-bit--------
* 实现AES加密
* $str : 要加密的字符串
* $keys : 加密密钥
* $iv : 加密向量
* $cipher_alg : 加密方式
function ecryptdString($str,$keys="0152",$iv="6005",$cipher_alg=MCRYPT_RIJNDAEL_128){
$encrypted_string= bin2hex(mcrypt_encrypt($cipher_alg,$keys, $str, MCRYPT_MODE_CBC,$iv));
return$encrypted_
* 实现AES解密
* $str : 要解密的字符串
* $keys : 加密密钥
* $iv : 加密向量
* $cipher_alg : 加密方式
functiondecryptStrin($str,$keys="0152",$iv="6005",$cipher_alg=MCRYPT_RIJNDAEL_128){
$decrypted_string= mcrypt_decrypt($cipher_alg,$keys, pack("H*",$str),MCRYPT_MODE_CBC,$iv);
return$decrypted_
在PHP中使用AES加密算法加密数据
在PHP中使用AES加密算法加密数据
php 7.1 AES/RSA加密实例
php 7.1 AES/RSA加密实例
java,php,AES 互通加解密
java,php,AES 互通加解密
PHP AES双向加密解密(128位)
Security::encrypt($str,$key);
Security::decrypt($str,$key);
class Security ...
(转)PHP AES256加密算法
aes.class.php
[php] view
/* - - - - - - - - - - - - - - - - - - - ...
因工作需要,在使用aes解密时,因客户开发语言有多种,现在基本就是java,php,asp.net三种语言是主流,笔者对三种语言也算是研究多年了,有时客户总是问这问那的,就调试好了三种不同语言的AES...
http://wangsigui.blog.51cto.com/0415
java的AES加密算法:
网页端(在没有https情况下)给密码之类的加密传输,虽然多此一举,也好过直接监控软件就能看到密码思路在传输密码的时候,先向后台获取一个随机码或者验证码,作为秘钥,网页端根据这个秘钥,加密要传输的数据...
AES128下载页(下载需要注册)require(./AES128.php); $aes=new AES128(); // 实例化$key=$aes-&makeKey(&china&); // key...
没有更多推荐了,$str = "test1"; //加密内容
$key = "key:111"; //密钥
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_CBC),MCRYPT_RAND);//初始化向量
echo "加密明文:".$str."&p&";
$str_encrypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$key,$str,MCRYPT_MODE_CBC,$iv); //加密函数
echo "加密密文:".$str_encrypt." &p&";
echo "加密密文base64_en:".base64_encode($str_encrypt)." &p&";
echo "加密密文base64_de:".base64_decode(base64_encode($str_encrypt))." &p&";
$str_decrypt = mcrypt_decrypt(MCRYPT_RIJNDAEL_128,$key,$str_encrypt,MCRYPT_MODE_CBC,$iv); //解密函数
echo "还原:".$str_
echo '&hr&';
$privateKey = "1111";
$encryptedData = base64_decode('bPwmyDgAcqYP0dTdHz3Uq5JpgrKkC+oU2SW7ic4k7eQFOqWyBTWZE/RE8rES/QXe');
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $privateKey, $encryptedData, MCRYPT_MODE_CBC, $iv);
var_dump( $decrypted );
&head&&title&&/title&
&script src="/js/aes.js"&&/script&
&script src="/js/md5.js"&&/script&
&script src="/js/pad-zeropadding.js"&&/script&
var data = "mysql_connect('111.111.111.111','root','111111')";
var key = CryptoJS.enc.Latin1.parse('1111');
CryptoJS.enc.Latin1.parse('1111');
var encrypted = CryptoJS.AES.encrypt(data, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.ZeroPadding });
document.write(encrypted);
&/html&http://www.cnblogs.com/liulun/p/3543774.html
java,php,js;AES 互通加解密
java,php,AES 互通加解密
PHP+JS密码加密实现HTTP上安全地传输密码
1、理论 在普通HTTP上,一般表单中的密码都是以明文方式传到服务器进行处理的。这无疑给了坏人以可乘之机!这里我们就说说怎么传输密码才是安全的! 与其传输密码本身,到不如传输其加密后的形式。MD5是个...
PHP开发过程中AES加密解密问题 js前端AES加密,PHP解密
因开发需求,需要通过前端js加密传输数据,通过各种度娘搜索最后采用了AES方式,但是发现有的是有代码没文件,有的是测试解密出现乱码,现在将自己最后采用的方式总结一下。
首先就是关于所引用的AES...
PHP语言实现的AES加密、解密
* Class AES
* 用于AES加解密数据
* by:云客 【云游天下,做客四方】,微信号:php-world,欢迎转载,但须注明出处,讨论请加qq群2...
废话不多说,直接上代码
namespace A
* var string $method 加解密方法,可通过o...
JS和PHP交互AES加密解密数据
虽然很多人也写了类似的博客,但是网上也很多坑;下面罗列坑
php7.0开始mcrypt_decrypt函数将不能使用,整个mcrypt模块都废弃了;目前我使用...
因工作需要,在使用aes解密时,因客户开发语言有多种,现在基本就是java,php,asp.net三种语言是主流,笔者对三种语言也算是研究多年了,有时客户总是问这问那的,就调试好了三种不同语言的AES...
依赖PHP自身的mcrypt扩展&?phpclass aes {
// CRYPTO_CIPHER_BLOCK_SIZE 32
private $_secret_...
下载 & 开发技术 & &em&PHP&/em& & 基于&em&PHP&/em&和JS的&em&AES&/em&相互加密&em&解密&/em&方法详解(CryptoJS)_&em&PHP&/em&_JS_&em&AES&/em&源码 基于&em&PHP&/em&和JS的&em&AES&/em&相互加密&em&解密&/em&方法详解(CryptoJS)_&em&PHP&/em&_JS_&em&AES&/em&源码...
JS实现AES加密并与PHP互通
有关数据加密解密问题,有很多钟加密方式;
这里我讲述下js和php实现AES互通
首先引入这几个js文件
下载地址http://pan.baidu.com/s/1sjNpESd
没有更多推荐了,升级 PHP7.1 后 openssl 解密 mcrypt AES 数据不兼容问题如何处理 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
已注册用户请 &
升级 PHP7.1 后 openssl 解密 mcrypt AES 数据不兼容问题如何处理
10:44:12 +08:00 · 4821 次点击
$key = "";
$iv = "3456";
//原本的 mcrypt 加密
$en_data = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, "3456", MCRYPT_MODE_CBC, $iv));
var_dump("mcrypt_encrypt:");
var_dump(bin2hex(base64_decode($en_data)));
var_dump($en_data);
$de_data = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, base64_decode($en_data), MCRYPT_MODE_CBC, $iv);
var_dump("mcrypt_decrypt:");
var_dump($de_data);
//OpenSSL 加密
$en_data = base64_encode(openssl_encrypt("3456", "aes-128-cbc", $key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $iv));
var_dump("openssl_encrypt:");
var_dump(bin2hex(base64_decode($en_data)));
var_dump($en_data);
$de_data = openssl_decrypt(base64_decode($en_data), "aes-128-cbc", $key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $iv);
var_dump("openssl_decrypt:");
var_dump($de_data);
var_dump(openssl_error_string());
string 'mcrypt_encrypt:' (length=15)
string '098edde21e92cbcf877de' (length=32)
string 'CY7d4h6Sy8AQeEaVCfh33g==' (length=24)
string 'mcrypt_decrypt:' (length=15)
string '3456' (length=16)
string 'openssl_encrypt:' (length=16)
string '434b1b1ebbcd16bfe7f9' (length=32)
string 'Q0sbHrOQJPJwZyvNFr/n+Q==' (length=24)
string 'openssl_decrypt:' (length=16)
string '3456' (length=16)
string 'error::digital envelope routines:EVP_CIPHER_CTX_set_key_length:invalid key length' (length=89)
目前正在使用的是 PHP 的算法,使用了 32 位的秘钥和 16 位的向量。但是在 openssl 中这种加密出来的结果不一致,并且扔过来一个错误
不确定要如何才能处理用 mcrypt 加密的数据,用 openssl 解密,秘钥长度历史遗留问题没法改,libmcrypt 的源码看不懂它如何兼容过长的秘钥
第 1 条附言 &·&
12:04:08 +08:00
问题已解决:
$en_data = base64_encode(openssl_encrypt(&3456&, &aes-256-cbc&, $key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $iv));
var_dump($en_data);
$de_data = openssl_decrypt(base64_decode($en_data), &aes-256-cbc&, $key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $iv);
var_dump($de_data);
换成 aes-256-cbc 即可,除了会有警告
目前尚无回复
& · & 3193 人在线 & 最高记录 3762 & · &
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.1 · 17ms · UTC 03:41 · PVG 11:41 · LAX 20:41 · JFK 23:41? Do have faith in what you're doing.PHP7.1中AES加密解密方法 mcrypt_module_open()替换方案 - 泰客笔记搜索PHP7.1中AES加密解密方法 mcrypt_module_open()替换方案&发布于
13:2411155浏览mcrypt 扩展已经过时了大约10年,并且用起来很复杂。因此它被废弃并且被 OpenSSL 所取代。 从PHP 7.2起它将被从核心代码中移除并且移到PECL中。PHP手册在7.1迁移页面给出了替代方案,就是用OpenSSL取代MCrypt./**
&*&[AesSecurity&aes加密,支持PHP7.1]
class&AesSecurity
&&&&&*&[encrypt&aes加密]
&&&&&*&@param&&&&[type]&&&&&&&&&&&&&&&&&&&$input&[要加密的数据]
&&&&&*&@param&&&&[type]&&&&&&&&&&&&&&&&&&&$key&&&[加密key]
&&&&&*&@return&&&[type]&&&&&&&&&&&&&&&&&&&&&&&&&&[加密后的数据]
&&&&public&static&function&encrypt($input,&$key)
&&&&&&&&$data&=&openssl_encrypt($input,&'AES-128-ECB',&$key,&OPENSSL_RAW_DATA);
&&&&&&&&$data&=&base64_encode($data);
&&&&&&&&return&$
&&&&&*&[decrypt&aes解密]
&&&&&*&@param&&&&[type]&&&&&&&&&&&&&&&&&&&$sStr&[要解密的数据]
&&&&&*&@param&&&&[type]&&&&&&&&&&&&&&&&&&&$sKey&[加密key]
&&&&&*&@return&&&[type]&&&&&&&&&&&&&&&&&&&&&&&&&[解密后的数据]
&&&&public&static&function&decrypt($sStr,&$sKey)
&&&&&&&&$decrypted&=&openssl_decrypt(base64_decode($sStr),&'AES-128-ECB',&$sKey,&OPENSSL_RAW_DATA);
&&&&&&&&return&$
}可据需求,自行改编。AES加密 密钥长度问题
[问题点数:40分,结帖人hao2629]
本版专家分:219
结帖率 98.77%
CSDN今日推荐
本版专家分:8684
本版专家分:219
本版专家分:8684
本版专家分:8684
本版专家分:451768
2017年 总版技术专家分年内排行榜第十2013年 总版技术专家分年内排行榜第八
2017年2月 总版技术专家分月排行榜第三
2018年7月 .NET技术大版内专家分月排行榜第一2018年6月 .NET技术大版内专家分月排行榜第一2018年1月 .NET技术大版内专家分月排行榜第一2017年5月 .NET技术大版内专家分月排行榜第一2017年4月 .NET技术大版内专家分月排行榜第一2017年3月 .NET技术大版内专家分月排行榜第一2017年2月 .NET技术大版内专家分月排行榜第一2016年10月 .NET技术大版内专家分月排行榜第一2016年8月 .NET技术大版内专家分月排行榜第一2016年7月 .NET技术大版内专家分月排行榜第一
2018年4月 .NET技术大版内专家分月排行榜第二2018年3月 .NET技术大版内专家分月排行榜第二2017年12月 .NET技术大版内专家分月排行榜第二2017年9月 .NET技术大版内专家分月排行榜第二2017年7月 .NET技术大版内专家分月排行榜第二2017年6月 .NET技术大版内专家分月排行榜第二2016年12月 .NET技术大版内专家分月排行榜第二2016年9月 .NET技术大版内专家分月排行榜第二2016年6月 .NET技术大版内专家分月排行榜第二2016年3月 .NET技术大版内专家分月排行榜第二2016年1月 .NET技术大版内专家分月排行榜第二2015年12月 .NET技术大版内专家分月排行榜第二2015年2月 .NET技术大版内专家分月排行榜第二2015年1月 .NET技术大版内专家分月排行榜第二2014年11月 .NET技术大版内专家分月排行榜第二2014年5月 .NET技术大版内专家分月排行榜第二2014年4月 .NET技术大版内专家分月排行榜第二2012年2月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二
匿名用户不能发表回复!
其他相关推荐}

我要回帖

更多关于 aes三把秘钥 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信