PHP7.1中使用openssl替换mcrypt的实例详解

PHP7.1中使用openssl替换mcrypt的实例详解”

背景

PHP 7.1 中,mcrypt 扩展已经被废弃,官方推荐使用 openssl 扩展替代,本文将详细讲解如何在 PHP 7.1 中使用 openssl 扩展替换 mcrypt 扩展。

准备工作

在开始之前,需要确认 PHP 版本是否为 7.1 及以上,以及是否安装了 openssl 扩展。可以通过在终端执行 php -v 和在 php 文件中使用 extension_loaded('openssl') 来确认。

mcrypt 与 openssl 的区别

以 AES 128 ECB 模式加密为例,区别如下:

mcrypt

$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$key = "your_key_here";
$text = "your_text_here";
$encrypted_text = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $text, MCRYPT_MODE_ECB, $iv);
$base64_encrypted_text = base64_encode($encrypted_text);

openssl

$key = "your_key_here";
$text = "your_text_here";
$encrypted_text = openssl_encrypt($text, "AES-128-ECB", $key);
$base64_encrypted_text = base64_encode($encrypted_text);

详细步骤

  1. 确认 PHP 版本是否为 7.1 及以上,以及是否安装了 openssl 扩展。
  2. 替换 mcrypt_create_iv() 函数。

mcrypt_create_iv($size, $source) 替换为 openssl_random_pseudo_bytes($size)

```php
// mcrypt_create_iv
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);

// openssl_random_pseudo_bytes
$iv_size = openssl_cipher_iv_length("AES-128-ECB");
$iv = openssl_random_pseudo_bytes($iv_size);
```
3. 替换 mcrypt_encrypt() 函数。

mcrypt_encrypt($cipher, $key, $data, $mode, $iv) 替换为 openssl_encrypt($data, $cipher, $key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $iv)

```php
// mcrypt_encrypt
$encrypted_text = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $text, MCRYPT_MODE_ECB, $iv);

// openssl_encrypt
$encrypted_text = openssl_encrypt($text, "AES-128-ECB", $key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $iv);
```
4. 结果验证

执行下面的代码,如果输出一致,则说明替换成功。

```php
$key = "your_key_here";
$text = "your_text_here";

// mcrypt
$mcrypt_iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
$mcrypt_iv = mcrypt_create_iv($mcrypt_iv_size, MCRYPT_RAND);
$mcrypt_encrypted_text = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $text, MCRYPT_MODE_ECB, $mcrypt_iv);
$mcrypt_base64_encrypted_text = base64_encode($mcrypt_encrypted_text);

// openssl
$openssl_iv_size = openssl_cipher_iv_length("AES-128-ECB");
$openssl_iv = openssl_random_pseudo_bytes($openssl_iv_size);
$openssl_encrypted_text = openssl_encrypt($text, "AES-128-ECB", $key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $openssl_iv);
$openssl_base64_encrypted_text = base64_encode($openssl_encrypted_text);

if ($mcrypt_base64_encrypted_text === $openssl_base64_encrypted_text) {
echo "Successfully replaced mcrypt with openssl.";
} else {
echo "Failed to replace mcrypt with openssl.";
}
```

示例

示例 1:PHP 中使用 AES 加密

function aes_encrypt($data, $key) {
    $iv_size = openssl_cipher_iv_length("AES-128-CTR");
    $iv = openssl_random_pseudo_bytes($iv_size);

    $encrypted_data = openssl_encrypt($data, "AES-128-CTR", $key, OPENSSL_RAW_DATA, $iv);

    $result = base64_encode($iv . $encrypted_data);

    return $result;
}

function aes_decrypt($data, $key) {
    $data = base64_decode($data);
    $iv_size = openssl_cipher_iv_length("AES-128-CTR");
    $iv = substr($data, 0, $iv_size);
    $encrypted_data = substr($data, $iv_size);

    $result = openssl_decrypt($encrypted_data, "AES-128-CTR", $key, OPENSSL_RAW_DATA, $iv);

    return $result;
}

示例 2:Laravel 中使用 AES 加密

$encrypted_data = encrypt($data);
$decrypted_data = decrypt($encrypted_data);

这里使用了 Laravel 自带的加密解密函数,可以自由切换加密算法。

结论

本文详细讲解了如何在 PHP 7.1 中使用 openssl 扩展替换 mcrypt 扩展,并给出了两个实际使用场景的示例。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP7.1中使用openssl替换mcrypt的实例详解 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • token验证

    token验证 什么是token?我相信很多开发者都或多或少听过基于 token 的用户鉴权和基于 session 的用户鉴权,而今天说的 token 验证就是第一种了。token 的意思是“令牌”,是用户第一次登录服务器返回的,它能让用户不需要提交账户和密码就能进行服务器验证身份,它是被放在请求头中一起提交给服务器的。 为什么用 token 验证?怎么用 …

    PHP 2023年4月17日
    00
  • PHP获得数组交集与差集的方法

    接下来我会详细讲解PHP获得数组交集与差集的方法。 一. PHP获取数组交集的方法 PHP中获取两个数组的交集非常简单,我们可以使用array_intersect函数,该函数返回一个新数组,其中包含两个输入数组的公共元素。 1. array_intersect()函数基本语法 array array_intersect ( array $array1 , a…

    PHP 2023年5月26日
    00
  • PHP设计模式中工厂模式深入详解

    以下是关于“PHP设计模式中工厂模式深入详解”的完整使用攻略: 基础知识 在了解PHP设计模式中的工厂模式之前,需要掌握一些基础知识,包括设计模式的基本概念、工厂模式的基本原理、工厂模式的分类等。以下是一些常见的基础知识: 设计模式的基本概念,包括设计模式的定义、设计模式的分类等。 工厂模式的基本原理,包括工厂模式的定义、工厂模式的分类等。 工厂模式的分类,…

    PHP 2023年5月12日
    00
  • 谈谈新手如何学习PHP

    以下是“谈谈新手如何学习PHP”的完整攻略。 1. 基础知识的学习 首先,学习PHP需要有一定的编程基础。如果你是完全的编程新手,建议先学习一门编程语言,例如Python或者JavaScript。对于已经具备一定编程基础的人来说,可以直接开始学习PHP。 在学习PHP的基础知识方面,以下是一些建议: 1.1 网上教程 可以在网上寻找一些PHP的在线教程,例如…

    PHP 2023年5月23日
    00
  • 非常全面的php日期时间运算汇总

    PHP日期时间运算汇总 本文将详细介绍PHP中日期时间相关的运算操作。包括日期格式化、日期计算、日期比较、日期解析等常见操作。读者在学习本文后,将具备掌握PHP中日期时间相关的运算操作的能力。 一、日期格式化 日期格式化是指将日期按照一定的格式展示的过程。在PHP中日期格式化可以使用date()函数来实现,date()函数的参数传入所需要的格式字符串即可。 …

    PHP 2023年5月24日
    00
  • PHP编程快速实现数组去重的方法详解

    针对“PHP编程快速实现数组去重的方法详解”的问题,我来给您详细讲解。 1. 什么是数组去重 数组去重是指在一个数组中,将重复的元素删除,只保留一个元素的操作过程。具体来说,就是将数组中重复出现的元素保留一个即可。 2. 方法详解 2.1使用array_unique函数 在PHP中,使用array_unique()函数可以快速实现数组去重。array_uni…

    PHP 2023年5月26日
    00
  • PHP中信息格式化操作详解(MessageFormatter类)

    PHP中信息格式化操作详解(MessageFormatter类) 介绍 MessageFormatter是PHP的一个强大的类,用于将字符串格式化和本地化,适用于各种应用程序,尤其是多语言应用程序。它支持复杂的消息格式化,例如数字、货币、日期和时间格式化。此外,还支持匿名参数和命名参数。 安装 MessageFormatter是PHP的标准库之一,无需进一步…

    PHP 2023年5月26日
    00
  • PHP实现数据四舍五入的方法小结【4种方法】

    PHP实现数据四舍五入的方法小结【4种方法】 对于一些需要精确计算的应用场景,我们需要对数据进行四舍五入的操作,本文总结了4种PHP实现数据四舍五入的方法。 方法一:round函数 round函数是PHP自带的函数,可以对一个数进行四舍五入。此函数接受两个参数,第一个参数是需要进行四舍五入的数值,第二个参数是小数点后保留的位数。如果第二个参数未传值,则默认返…

    PHP 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部