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) { ...
随机推荐
- vue3.x异步组件
在大型应用中,我们可能需要将应用分割成小一些的代码块,并且只在需要的时候才从服务器加载一个模块 vue2.x 曾经简单的异步组件 components: { AsyncComponent: () =& ...
- Android构建工具--AAPT2源码解析(一)
一.什么是AAPT2 在Android开发过程中,我们通过Gradle命令,启动一个构建任务,最终会生成构建产物"APK"文件.常规APK的构建流程如下: (引用自Google官方 ...
- Java:动态代理小记
Java:动态代理小记 对 Java 中的 动态代理,做一个微不足道的小小小小记 概述 动态代理:当想要给实现了某个接口的类中的方法,加一些额外的处理.比如说加日志,加事务等.可以给这个类创建一个代理 ...
- Prometheus基于文件的服务发现
Prometheus基于文件的服务发现 一.基于文件的服务发现 1.prometheus.yml 配置文件的写法 2.file_sd 目录下的文件 3.配置结果 二.注意事项 三.参考链接 一.基于文 ...
- spring security整合QQ登录
最近在了解第三方登录的内容,尝试对接了一下QQ登录,此次记录一下如何实现QQ登录的过程,在这个例子中是和spring secuirty整合的,不整合spring secuirty也是一样的. 需求: ...
- Gitflow branch与Docker image tag命名冲突怎么办?
谷歌还是比必应要好用一点. 在前公司,我根据主流的git flow 给团队搭建了一套devops流程,运行在 docker & k8s上. 在现代devops流程中,一般推荐使用git分支名或 ...
- 痞子衡嵌入式:超级下载算法RT-UFL v1.0在Segger Ozone下的使用
痞子衡主导的"学术"项目 <RT-UFL - 一个适用全平台i.MXRT的超级下载算法设计> v1.0 版发布近 4 个月了,部分客户已经在实际项目开发调试中用上了这个 ...
- EFCore_环境搭建与简单使用_01
开发环境搭建 经典步骤:建实体类.建DbContext.生成数据库 本次使用codefirst模式,走下流程,(你也可以先建好数据库,用命令行的形式,直接生成DbContext,而且生成的DbCont ...
- 转移指令原理和Inline Hook
目录 转移指令原理和Inline Hook 转移指令 操作符offset jmp指令 根据位移进行转移的jmp指令 插播HOOK知识 Inline Hook Inline Hook 原理 Hook代码 ...
- # Host xx.xxx.x.xxx found: line 1 /root/.ssh/known_hosts updated. Original contents retained as /root/.ssh/known_hosts.old
一直可以ssh登录远程服务器,突然不行了. 原因:远程服务器最近打过安全补丁,安全标识已经更新. 清理本机的安全密匙即可 解决办法: #ssh-keygen -R "需要远程服务器ip地址& ...