php7使用openssl_encrypt函数进行AES加密

这篇具有很好参考价值的文章主要介绍了php7使用openssl_encrypt函数进行AES加密。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

手上有个api对接需求,要用到AES加密,要用到openssl_encrypt函数,记录一下,鉴权要求大概如下。

  1. 将明文先base64加密,后取前16位
  2. 判断字符串的字节型数据长度是否为16倍整,如不是则进行补充(PKCS#7标准)
  3. 对字符串进行AES加密后base64加密,其中iv=A-16-Byte-String

介绍

openssl_encrypt($data, $method, $password, $options, $iv)

参数说明:

  1. $data 加密明文
  2. $method 加密方法 这里使用AES-256-CBC
  3. $passwd 加密密钥
  4. $options 数据格式选项(可选)OPENSSL_RAW_DATA , OPENSSL_ZERO_PADDING,OPENSSL_NO_PADDING
  5. $iv 密初始化向量(可选)

实现

将AES加密,解密(用不到),长度裁剪等功能先封装成函数

	/**
	* 对数据进行AES加密
	* @param $data 明文
	* @param $privatekey 秘钥
	* @param $iv 密初始化向量
	* @return 加密后的字符串
	*/
    public static function encrypt($data, $private, $iv)
    {
    	$method='AES-256-CBC';
        return base64_encode(openssl_encrypt($data, $method, $private, OPENSSL_RAW_DATA, $iv));
    }
	/**
	* 对数据进行AES解密
	* @param $data 密文
	* @param $privatekey 秘钥
	* @param $iv 密初始化向量
	* @return 解密后的字符串
	*/
    public static function decrypt($data, $private, $iv)
    {
    	$method='AES-256-CBC';
        return openssl_decrypt(base64_decode($data), $method, $private, OPENSSL_RAW_DATA, $iv);
    }
    /**
     * 对需要加密的明文进行填充补位
     * @param $text 需要进行填充补位操作的明文
	 * @param $block_size 需要的位数
     * @return 补齐明文字符串
     */
    public static function pad($text,$block_size=16)
    {
        $text_length = strlen($text);
        //计算需要填充的位数
        $amount_to_pad = $block_size - ($text_length % $block_size);
        if ($amount_to_pad == 0) {
            $amount_to_pad = $block_size;
        }
        //获得补位所用的字符
        $pad_chr = chr($amount_to_pad);
        $tmp = "";
        for ($index = 0; $index < $amount_to_pad; $index++) {
            $tmp .= $pad_chr;
        }
        return $text . $tmp;
    }

实现

 $data='hello world';
 $private='dfgdfhdhdfh';
 $iv='A-16-Byte-String';

 //截取前16位
 $data= substr($data, 16);
 //判断字符串的字节型数据长度是否为16倍整,不是进行补充
 $data= self::pad($data);
 //调加密方法
 $AES_en_str = self::encrypt($data, $private, $iv);

2022-11-23补充:看网上资料,当openssl_encrypt的options=OPENSSL_RAW_DATA,会自动对字符串进行16位的PKCS#7标准填充。文章来源地址https://www.toymoban.com/news/detail-404581.html

到了这里,关于php7使用openssl_encrypt函数进行AES加密的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • openssl 加密(encrypt)、解密(decrypt)、签名(sign)、验证(verify)

    上述方式可以确认身份,如果我用这个公钥能解密,那一定是你发送的,因为私钥只有你有 [kyzjj@yyzc-zjjcs04 openssl]$ openssl rsautl -encrypt -inkey public.key -pubin -in test -out en-test [kyzjj@yyzc-zjjcs04 openssl]$ [kyzjj@yyzc-zjjcs04 openssl]$ openssl rsautl -decrypt -inkey private.key -in en-test hello world [kyzjj@yyzc

    2024年02月11日
    浏览(39)
  • Mac PHP7.4安装

    查看可按照版本: 使用brew安装: 但报错: Error: php@7.4 has been disabled because it is a versioned formula! 这是因为php7.4官方已经不再维护,所以Hombrew将该php版本移出了repository,所以安装不了。 解决方案 从第三方仓库中安装 比如(所有旧版php仓库地址https://github.com/shivammath…)

    2024年02月13日
    浏览(47)
  • Ubuntu部署PHP7.4

    系统版本:Ubuntu22.04 PHP版本: 7.4 Mysql版本:8.0 Nginx版本: 最新 1. 更新系统 首先,确保系统包是最新的: 2. 安装 Nginx Nginx 在默认的 Ubuntu 仓库中,因此安装它很简单: 启动并使 Nginx 在启动时自动启动: 3. 安装 MySQL 8.0 列出MySQL的可用版本 使用以下命令安装您选择的版本,替换

    2024年02月11日
    浏览(36)
  • macOS系统安装PHP7教程

    今天在macOS上安装PHP时,由于我的brew版本太高,所支持的最低PHP版本为8,后续安装PHPBrew又提示各种缺库,太麻烦了,后续今天手动安装,踩了一下坑,随笔记录 先下载:PHP7.4.30安装包(或者自己版本去官网下载手动解压) 可手动解压或者tar -xzvf php-7.4.30.tar.gz(7.4.30改成自己安装

    2024年01月22日
    浏览(42)
  • mac brew 安装php7.4

    查看可按照版本: brew search php 使用brew安装: brew install php@7.4 但报错: Error: php@7.4 has been disabled because it is a versioned formula! 这是因为php7.4官方已经不再维护,所以Hombrew将该php版本移出了repository,所以安装不了。 解决方案 从第三方仓库中安装 比如(所有旧版php仓库地址https

    2024年02月10日
    浏览(35)
  • PHP快速实战20-PHP7中的垃圾回收机制与原理讲解

    本文已收录于PHP全栈系列专栏:PHP快速入门与实战 在计算机程序中,垃圾回收指的是一种自动管理内存的技术。在程序执行过程中,分配给它的内存会随着对象的创建和销毁不断发生变化,如果没有垃圾回收,这些不再被使用的内存会一直占用系统资源,最终导致系统崩溃。

    2024年02月08日
    浏览(48)
  • 【PHP面试题44】PHP5的版本和PHP7之间有哪些区别

    本文已收录于PHP全栈系列专栏:PHP面试专区。 计划将全覆盖PHP开发领域所有的面试题, 对标资深工程师/架构师序列 ,欢迎大家提前关注锁定。 PHP7相比与PHP5有比较大的调整,它们之间有很多区别。本篇博文将介绍PHP5和PHP7在底层调整和应用层上的主要区别。 PHP7相较于PHP5有

    2024年02月16日
    浏览(56)
  • 宝塔PHP7.1版本37个扩展作用介绍

    PATH_INFO:这个扩展可以让PHP获取到URL中的PATH_INFO信息,方便处理URL路由。 bt_safe:这个扩展可以帮助PHP防止一些常见的安全漏洞,比如SQL注入、XSS攻击等。 ionCube:这个扩展可以对PHP代码进行加密,保护代码的安全性。 fileinfo:这个扩展可以让PHP获取文件的类型和格式,方便处

    2024年02月06日
    浏览(51)
  • ubuntu18.04 安装php7.4-xdebug

    场景 apt install php7.4-xdebug 下载失败, 只好通过编译解决了 解决 https://xdebug.org/wizard 输入php -i的执行结果

    2024年02月15日
    浏览(60)
  • dedecms织梦php7+删除不了后台栏目的解决方法

    明明提示删除成功了,可是栏目还在后台栏目管理里,那是因为你的web环境PHP版本太高,例如PHP7的,织梦最新版本20180109还不能完全兼容PHP7,要么降低你的PHP版本为PHP5,要么修改一下这个文件。 PHP7+高版本环境下,织梦dedecms删除网站栏目失败。主要原因是语句书写不严谨,

    2024年02月03日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包