利用AES须要把稳下面几点:

1) 确保都利用MCRYPT_MODE_CBC;2) 确保明文添补都利用的是Pkcs5;3) 加密key在AES_128长度必须是16, 24, 或者 32 字节(bytes);如果不足长必须添补,过长必须截取,建议直接md5;4) 加密向量iv与加密key有同样的约定,但在ECB可以忽略该值(用不到)。
5) 把稳加密结果建议都利用base64编码。

只有以上都保持一样,各个措辞里终极加密的密文才能保持同等,否则会涌现:1) 每次加密的密文不一样,但是能解密;(iv随机天生导致的)2) 不同措辞加密出来的密文不一致。

phpsha256PHP之AES加密算法 Python

各种措辞实现示例

PHP

示例:

PHP利用Mcrypt扩展

这里还是利用上文的Crypt类。

利用ECB + Pkcs7
和其它措辞联调的时候须要把稳加密key已经由处理、加密向量默认值的设置。

输出结果:

3+WQyhMavuxzPzy40PZhJg==123456--------------mdSm0RmB+xAKrTah3DG31A==123456

本例里当key长度不足时,封装的类已经自动帮我们添补好了足够长度;当key长度即是16时,key的值不会改变。

PHP版的SDK

只要把DES改为AES即可,ECB改为CBC,块大小改为16。

ECB模式没有用到向量。
本例为CBC,加密结果不变。
但是加密向量则不一样了。

终极的一点是偏移量的问题,一定要调用pkcs5_unpad方法去除由于偏移量要求后,返回的前后都有乱码的问题,重点是调试去除返回数值{}前后的代码,一定记住你通报的偏移量和这个方法里的偏移量要同等,不然会有乱码去除不完全

Python

环境:Python 2.7.5,Linux CentOS7

须要先安装:

输出:

mdSm0RmB+xAKrTah3DG31A==123456

这里利用了AES+ECB+PKCS7Padding方法。
加密结果和PHP是同等的。

做事端/客户端加密选型

DES/CBC/PKCS7Padding

此时加密块大小都是8字节,PKCS5和PKCS7效果一样。
各端实现的时候须要把稳:1) 利用相同的加密key,把稳长度必须是8字节;2) 利用相同的向量iv,建议设置成\"大众\公众;3) 必须实现相同的PKCS7添补算法和反添补算法;4) 加密结果都利用base64编码。

AES/ECB/PKCS7Padding

利用AES_128加密块大小都是16字节,PKCS5无法利用,请利用PKCS7。
各端实现的时候须要把稳:1) 利用相同的加密key,把稳长度必须是16, 24, 或者 32 字节(bytes);如果不足长必须添补,过长必须截取,建议直接md5;2) 利用相同的向量iv,建议设置成\公众\"大众;可以和加密key一样利用md5后的值;ECB模式下可以忽略该项;3) 必须实现相同的PKCS7添补算法和反添补算法;4) 加密结果都利用base64编码。

AES/CBC/PKCS7Padding

AES/ECB/PKCS7Padding基本同等,但由于CBC模式用到向量,把稳向量长度最少16字节。
如果长度不足,请添补\公众\"大众。
建议随机天生,然后base64后传给前端。

常用库先容

Mcrypt

Mcrypt 是一个功能强大的加密算法扩展库。

Mcrypt 库供应了对多种块算法的支持, 包括:DES,TripleDES,Blowfish (默认), 3-WAY,SAFER-SK64,SAFER-SK128,TWOFISH,TEA,RC2 以及 GOST,并且支持 CBC,OFB,CFB 和 ECB 密码模式。

PHP里通过启用 Mcrypt 扩展即可利用(mcrypt_开头的系列函数)。
把稳的是,要利用该扩展,必须首先安装mcrypt标准类库,而 mcrypt 标准类库依赖 libmcrypt 和 mhash 两个库。
从 PHP 5.0.0 开始,须要利用 libcrypt 2.5.6 或更高版本。

Crypto-JS

https://github.com/brix/crypto-js

CryptoJS (crypto.js) 为 JavaScript 供应了各种各样的加密算法。
目前已支持的算法包括:

MD5

SHA-1

SHA-256

AES

Rabbit

MARC4

HMAC

HMAC-MD5

HMAC-SHA1

HMAC-SHA256

PBKDF2

PyCrypto

https://github.com/dlitz/pycrypto

PyCrypto是利用Python编写的加密工具包。
支持所有主流算法。

hashlib

Python的hashlib供应了常见的择要算法,如MD5,SHA1等等。

Crypt_DES.php

https://my.oschina.net/u/995648/blog/113390

通过纯PHP实现的DES加密。
示例:

在线工具

1、在线加密解密(也可自行百度,网上工具很多)http://tool.oschina.net/encrypt?type=2