网站首页 > 技术文章 正文
AES简介
AES(Advanced Encryption Standard),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。ECB模式是将明文按照固定大小的块进行加密的,块大小不足则进行填充。ECB模式没有用到向量。
使用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) 不同语言加密出来的密文不一致。
各种语言实现示例
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
猜你喜欢
- 2025-05-24 网络信息安全之敏感信息在传输、显示时如何加密和脱敏处理
- 2025-05-24 常见加密方式及Python实现
- 2025-05-24 pdf怎么加密
- 2025-05-24 aes256 加密 解密 (python3) 「二」
- 2025-05-24 深入理解Python3密码学:详解PyCrypto库加密、解密与数字签名
- 2025-05-24 Springboot实现对配置文件中的明文密码加密
- 2025-05-24 JavaScript常规加密技术
- 2025-05-24 信息安全人人平等 谷歌推出低性能安卓手机加密技术
- 2025-05-24 SpringBoot与Jasypt整合,实现数据库字段自动加密解密功能
- 2025-05-24 安全性能爆表!Win10 TH2引入XTS-AES加密算法
你 发表评论:
欢迎- 07-10Oracle 与 Google Cloud 携手大幅扩展多云服务
- 07-10分享收藏的 oracle 11.2.0.4各平台的下载地址
- 07-10Oracle 和 Microsoft 推出 Oracle Exadata 数据库服务
- 07-10Oracle Database@Azure 推进到南美等新区域并增加了新服务
- 07-10Oracle宣布推出 Oracle Database@AWS 的有限预览版
- 07-10Oracle与Nextcloud合作,推出主权云上的安全协作平台
- 07-10NodeRED魔改版连接MsSql、PostgreSQL、MySQL、OracleDB存储无忧
- 07-10对于企业数据云备份,“多备份”承诺的是成本更低,管理更高效#36氪开放日深圳站#
- 601℃几个Oracle空值处理函数 oracle处理null值的函数
- 593℃Oracle分析函数之Lag和Lead()使用
- 581℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 578℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 573℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 566℃【数据统计分析】详解Oracle分组函数之CUBE
- 552℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 547℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
-
- Oracle 与 Google Cloud 携手大幅扩展多云服务
- 分享收藏的 oracle 11.2.0.4各平台的下载地址
- Oracle 和 Microsoft 推出 Oracle Exadata 数据库服务
- Oracle Database@Azure 推进到南美等新区域并增加了新服务
- Oracle宣布推出 Oracle Database@AWS 的有限预览版
- Oracle与Nextcloud合作,推出主权云上的安全协作平台
- NodeRED魔改版连接MsSql、PostgreSQL、MySQL、OracleDB存储无忧
- 对于企业数据云备份,“多备份”承诺的是成本更低,管理更高效#36氪开放日深圳站#
- 解读丨《归档文件整理规则》— 电子文件元数据存储
- Data Guard跳归档恢复的实践(dataguard failover)
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端获取当前时间 (50)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (57)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)