对称加密

  对称加密算法是指,数据发信方将明文(原始数据)和密钥一起经过加密处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若要解读原文,则需要使用加密密钥及相关算法的逆算法对密文进行解密,使其恢复可读明文。

  优点:算法公开、计算量小、加密速度快、加密效率高,适合于加密大量数据的场合

  常用算法: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加密的更多相关文章

  1. 对称加密----AES和DES加密、解密

    目前主流的加密方式有:(对称加密)AES.DES        (非对称加密)RSA.DSA 调用AES/DES加密算法包最精要的就是下面两句话: Cipher cipher = Cipher.get ...

  2. RAS、AES、DES加密

    ---------------------------------------------------------------------------------------------------- ...

  3. 各种加密解密函数(URL加密解密、sha1加密解密、des加密解密)

    原文:各种加密解密函数(URL加密解密.sha1加密解密.des加密解密) 普通hash函数如md5.sha1.base64等都是不可逆函数.虽然我们利用php可以利用这些函数写出可逆函数来.但是跨语 ...

  4. Java http数据MD5、AES、DES加密

    一,数据加密 1.提供了,md5,Hex,Sha等不可逆算法加密 2.AES加密,此加密方式瘦平台影响较重,所以只适合同类平台加密解密 3.DES自定义加密,跨平台,兼容性好 1.org.apache ...

  5. AES,DES加密JS源文件及其使用方法

    源文件地址:https://github.com/dididi1234/crypto 进入之后直接下载CryptoJS.js,js中直接引用,小程序也一样可以使用 具体使用方法和vue中的Crypto ...

  6. DES加密解密与AES加密解密

    随着开发时间的变长,当初认为比较难的东西,现在渐渐也就变的不那么难了!特别对于一些经常很少使用的类,时间长了之后渐渐就陌生了.所以在这里写一些日后可能会用到的加密与解密. 一.AES加密算法和DES加 ...

  7. C# 加密解密(DES,3DES,MD5,Base64) 类

    public sealed class EncryptUtils     {         #region Base64加密解密         /// <summary>        ...

  8. Android和java平台 DES加密解密互通程序及其不能互通的原因

    网上的demo一搜一大堆,但是,基本上都是一知半解(包括我).为什么呢?我在尝试分别在两个平台加密的时候,竟然发现Android DES 加密和java DES加密的程序不能互通.就是加密的结果不一样 ...

  9. DES加密:8051实现(C语言) & FPGA实现(VHDL+NIOS II)

    本文将利用C语言和VHDL语言分别实现DES加密,并在8051和FPGA上测试. 终于有机会阅读<深入浅出密码学一书>,趁此机会深入研究了DES加密的思想与实现.本文将分为两部分,第一部分 ...

  10. java des 加密/解密

    JAVA实现 加密 注意:DES加密和解密过程中,密钥长度都必须是8的倍数 public byte[] desCrypto(byte[] datasource, String password) { ...

随机推荐

  1. vue3.x异步组件

    在大型应用中,我们可能需要将应用分割成小一些的代码块,并且只在需要的时候才从服务器加载一个模块 vue2.x 曾经简单的异步组件 components: { AsyncComponent: () =& ...

  2. Android构建工具--AAPT2源码解析(一)

    一.什么是AAPT2 在Android开发过程中,我们通过Gradle命令,启动一个构建任务,最终会生成构建产物"APK"文件.常规APK的构建流程如下: (引用自Google官方 ...

  3. Java:动态代理小记

    Java:动态代理小记 对 Java 中的 动态代理,做一个微不足道的小小小小记 概述 动态代理:当想要给实现了某个接口的类中的方法,加一些额外的处理.比如说加日志,加事务等.可以给这个类创建一个代理 ...

  4. Prometheus基于文件的服务发现

    Prometheus基于文件的服务发现 一.基于文件的服务发现 1.prometheus.yml 配置文件的写法 2.file_sd 目录下的文件 3.配置结果 二.注意事项 三.参考链接 一.基于文 ...

  5. spring security整合QQ登录

    最近在了解第三方登录的内容,尝试对接了一下QQ登录,此次记录一下如何实现QQ登录的过程,在这个例子中是和spring secuirty整合的,不整合spring secuirty也是一样的. 需求: ...

  6. Gitflow branch与Docker image tag命名冲突怎么办?

    谷歌还是比必应要好用一点. 在前公司,我根据主流的git flow 给团队搭建了一套devops流程,运行在 docker & k8s上. 在现代devops流程中,一般推荐使用git分支名或 ...

  7. 痞子衡嵌入式:超级下载算法RT-UFL v1.0在Segger Ozone下的使用

    痞子衡主导的"学术"项目 <RT-UFL - 一个适用全平台i.MXRT的超级下载算法设计> v1.0 版发布近 4 个月了,部分客户已经在实际项目开发调试中用上了这个 ...

  8. EFCore_环境搭建与简单使用_01

    开发环境搭建 经典步骤:建实体类.建DbContext.生成数据库 本次使用codefirst模式,走下流程,(你也可以先建好数据库,用命令行的形式,直接生成DbContext,而且生成的DbCont ...

  9. 转移指令原理和Inline Hook

    目录 转移指令原理和Inline Hook 转移指令 操作符offset jmp指令 根据位移进行转移的jmp指令 插播HOOK知识 Inline Hook Inline Hook 原理 Hook代码 ...

  10. # 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地址& ...