PHP对称加密-AES加密、DES加密
对称加密
对称加密算法是指,数据发信方将明文(原始数据)和密钥一起经过加密处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若要解读原文,则需要使用加密密钥及相关算法的逆算法对密文进行解密,使其恢复可读明文。
优点:算法公开、计算量小、加密速度快、加密效率高,适合于加密大量数据的场合
常用算法:DES、3DES、TDEA、RC2、RC4、IDEA、AES等
AES是Advanced Encryption Standard(高级加密标准)的缩写,在密码学中又称Rijndael加密发,是美国联邦政府采用的一种区块加密标准。
在PHP的mcrypt扩展中,rijndael-128、rijndael-192、rijndael-256就是AES加密,三种分别使用不同的数据块和密码长度进行加密
在AES的ECB模式中,一般是16字节为一块,然后对这一整块进行加密,如果输入字符不够16字节,就需要补位
- AES-ECS方式进行加密数据代码如下:
- $auth_key = "safe_key";
- $salt = '!@#$%';
- $content = "hello world";
- $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');
- $iv_size = mcrypt_enc_get_iv_size($td);
- $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
- $key_size = mcrypt_enc_get_key_size($td);
- $key = substr(md5($auth_key.$salt), 0, $key_size);
- mcrypt_generic_init($td, $key, $iv);
- $block = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
- $pad = $block - (strlen($content) % $block);
- $content .= str_repeat(chr($pad), $pad); // 补齐不足16字节的位数内容
- $secret = mcrypt_generic($td, $content);
- echo bin2hex($secret);
- mcrypt_generic_deinit($td);
- mcrypt_module_close($td);
- AES-ECS方式进行解密数据代码如下:
- $auth_key = "safe_key";
- $salt = '!@#$%';
- $secret = "d639e78sf4b43rfer243t4t43tre";
- $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');
- $iv_size = mcrypt_enc_get_iv_size($td);
- $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
- $key_size = mcrypt_enc_get_key_size($td);
- $key = substr(md5($auth_key.$salt), 0, $key_size);
- mcrypt_generic_init($td, $key, $iv);
- $content = mdecrypt_generic($td, hex2bin($secret));
- $len = strlen($content);
- $ch = ord($content[$len - 1]);
- echo substr($content, 0, $len - $ch);
- mcrypt_generic_deinit($td);
- mcrypt_module_close($td);
使用DES加密
使用DES加密代码如下
- $auth_key = 'safe_key';
- $salt = '!@#$%';
- $content = 'helloworld';
- $td = mcrypt_module_open(MCRYPT_DES, '', 'ecb', ''); // 使用MCRYPT_DES算法,ecb模式
- $iv_size = mcrypt_enc_get_iv_size($td);// 设置初始化向量大小
- $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); // 创建初始向量
- $key_size = mcrypt_enc_get_key_size($td);// 返回支持的最大密钥长度
- $key = substr(md5($auth_key.$salt), 0, $key_size);
- mcrypt_generic_init($td, $key, $iv);// 初始化
- $secret = mcrypt_generic($td, $content);// 加密并返回加密的内容
- echo base64_encode($secret);
- mcrypt_generic_deinit($td);
- mcrypt_module_close($td); // 结束
使用DES解密代码如下
- $auth_key = 'safe_key';
- $salt = '!@#$%';
- $secret = 'nzPa0jPaaNca+Yty/HG4PA==';
- $td = mcrypt_module_open(MCRYPT_DES, '', 'ecb', ''); // 使用MCRYPT_DES算法,ecb模式
- $iv_size = mcrypt_enc_get_iv_size($td);// 设置初始化向量大小
- $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); // 创建初始向量
- $key_size = mcrypt_enc_get_key_size($td);// 返回支持的最大密钥长度
- $key = substr(md5($auth_key.$salt), 0, $key_size);
- mcrypt_generic_init($td, $key, $iv);// 初始化
- $content = mdecrypt_generic($td, base64_encode($secret)); // 解密并返回内容
- echo $content;
- mcrypt_generic_deinit($td);
- mcrypt_module_close($td); // 结束
PHP对称加密-AES加密、DES加密的更多相关文章
- 对称加密----AES和DES加密、解密
目前主流的加密方式有:(对称加密)AES.DES (非对称加密)RSA.DSA 调用AES/DES加密算法包最精要的就是下面两句话: Cipher cipher = Cipher.get ...
- RAS、AES、DES加密
---------------------------------------------------------------------------------------------------- ...
- 各种加密解密函数(URL加密解密、sha1加密解密、des加密解密)
原文:各种加密解密函数(URL加密解密.sha1加密解密.des加密解密) 普通hash函数如md5.sha1.base64等都是不可逆函数.虽然我们利用php可以利用这些函数写出可逆函数来.但是跨语 ...
- Java http数据MD5、AES、DES加密
一,数据加密 1.提供了,md5,Hex,Sha等不可逆算法加密 2.AES加密,此加密方式瘦平台影响较重,所以只适合同类平台加密解密 3.DES自定义加密,跨平台,兼容性好 1.org.apache ...
- AES,DES加密JS源文件及其使用方法
源文件地址:https://github.com/dididi1234/crypto 进入之后直接下载CryptoJS.js,js中直接引用,小程序也一样可以使用 具体使用方法和vue中的Crypto ...
- DES加密解密与AES加密解密
随着开发时间的变长,当初认为比较难的东西,现在渐渐也就变的不那么难了!特别对于一些经常很少使用的类,时间长了之后渐渐就陌生了.所以在这里写一些日后可能会用到的加密与解密. 一.AES加密算法和DES加 ...
- C# 加密解密(DES,3DES,MD5,Base64) 类
public sealed class EncryptUtils { #region Base64加密解密 /// <summary> ...
- Android和java平台 DES加密解密互通程序及其不能互通的原因
网上的demo一搜一大堆,但是,基本上都是一知半解(包括我).为什么呢?我在尝试分别在两个平台加密的时候,竟然发现Android DES 加密和java DES加密的程序不能互通.就是加密的结果不一样 ...
- DES加密:8051实现(C语言) & FPGA实现(VHDL+NIOS II)
本文将利用C语言和VHDL语言分别实现DES加密,并在8051和FPGA上测试. 终于有机会阅读<深入浅出密码学一书>,趁此机会深入研究了DES加密的思想与实现.本文将分为两部分,第一部分 ...
- java des 加密/解密
JAVA实现 加密 注意:DES加密和解密过程中,密钥长度都必须是8的倍数 public byte[] desCrypto(byte[] datasource, String password) { ...
随机推荐
- docker multi-stage 多阶段构建
多阶段构建 一.需求 二.普通构建 1.编写Dockerfile 2.构建镜像 三.多阶段(multi-stage)构建 1.编写Dockerfile 2.构建镜像 四.比较2个镜像的体积大小 我们在 ...
- 2021.9.14考试总结[NOIP模拟53]
T1 ZYB和售货机 容易发现把每个物品都买成$1$是没有影响的. 然后考虑最后一个物品的方案,如果从$f_i$向$i$连边,发现每个点有一个出度多个入度,可以先默认每个物品都能买且最大获利,这样可以 ...
- 关于linux下编译的几点知识
1.-L.-rpath 和 rpath_link的区别 参考博客文章:https://www.cnblogs.com/candl/p/7358384.html (1)-rpath和-rpath-lin ...
- str数组
- 嵌入式单片机之stm32串口你懂了多少!!
stm32作为现在嵌入式物联网单片机行业中经常要用多的技术,相信大家都有所接触,今天这篇就给大家详细的分析下有关于stm32的出口,还不是很清楚的朋友要注意看看了哦,在最后还会为大家分享有些关于stm ...
- STL模板
目录 栈stack 队列queue 列表List 集合set 映射map 多重映射multimap 对pair 元组tuple 容器containers 算法algorithms 仿函数/函数对象fu ...
- 对SQLServer错误使用聚集索引的优化案例(千万级数据量)
前言: 半个月前发了文章 SQLServer聚集索引导致的插入性能低 终于等到生产环境休整半天,这篇文章是对前文的实际操作. 以下正文开始: 异常:近期发现偶尔有新数据插入超时. 分析:插入条码有多种 ...
- zabbix 监控redis 挂掉自动重启 并发送企业微信
1.创建redis监控项[配置]-[主机]-[监控项]-创建监控项,监控6379端口(注意关闭防火墙或者开启防火墙端口6379) redis配置文件设置允许任何地址监听: 添加监控项 2.创建redi ...
- 深入浅出:了解时序数据库 InfluxDB
数据模型 1.时序数据的特征 时序数据应用场景就是在时间线上每个时间点都会从多个数据源涌入数据,按照连续时间的多种纬度产生大量数据,并按秒甚至毫秒计算的实时性写入存储. 传统的RDBMS数据库对写入的 ...
- 腾讯发布 K8s 多集群管理开源项目 Clusternet
11月4日,在腾讯数字生态大会上,腾讯宣布了云原生领域一项重磅开源进展-- K8s 多集群管理项目 Clusternet 正式开源. Clusternet 由腾讯联合多点生活.QQ音乐.富途证券.微众 ...