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

yizhihongxing

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日

相关文章

  • PHP实现多进程并行操作的详解(可做守护进程)

    我可以给你详细讲解如何使用PHP实现多进程并行操作并作为守护进程运行的方法。 什么是多进程并行操作 多进程并行操作是指程序可以同时运行多个进程,每个进程可以独立地执行不同的任务。这个功能在某些场景下非常有用,特别是在需要执行耗时任务或需要处理大量数据时。对于PHP程序员来说,使用多进程并行操作可以提高程序的性能。 如何实现多进程并行操作 在PHP中,实现多进…

    PHP 2023年5月23日
    00
  • php判断数组元素中是否存在某个字符串的方法

    当需要在 PHP 中判断数组元素中是否存在某个字符串时,可以使用 in_array 函数或 array_search 函数。 使用 in_array 函数检查数组中是否存在字符串 in_array 函数可以判断给定的值是否在数组中,并返回布尔值。如果数组中存在该值,则返回 true,否则返回 false。 该函数的语法如下: in_array($needle…

    PHP 2023年5月26日
    00
  • PHP学习笔记(一) 简单了解PHP

    PHP学习笔记(一) 简单了解PHP 简介 PHP是一种开源的服务器端脚本语言,常用于Web开发。它可以嵌入HTML中,使页面动态化。PHP被广泛应用于Drupal、WordPress、Magento等众多流行的开源软件。本篇笔记将简要介绍PHP的基本语法和常见应用。 安装与配置 要在本地电脑上运行PHP,需要安装Web服务器和PHP解释器。常用的Web服务…

    PHP 2023年5月23日
    00
  • PHP实现二维数组根据key进行排序的方法

    对于PHP来说,实现二维数组根据key进行排序的方法在工作中是非常常见的需求。下面是详细的攻略,帮助大家快速掌握这个技术。 1. 使用array_multisort()函数 <?php $array = array( array("volume" => 1, "edition" => 3), arra…

    PHP 2023年5月26日
    00
  • PHP实现十进制、二进制、八进制和十六进制转换相关函数用法分析

    下面为您详细讲解PHP实现十进制、二进制、八进制和十六进制转换相关函数用法分析的完整攻略。 一、PHP转换进制的相关函数 在PHP中,转换进制可以使用以下函数: decbin($num): 将十进制数转换为二进制数。 decoct($num): 将十进制数转换为八进制数。 hexdec($num): 将十六进制数转换为十进制数。 bindec($num): …

    PHP 2023年5月26日
    00
  • 基于PHP-FPM进程池探秘

    《基于PHP-FPM进程池探秘》是一篇介绍如何优化PHP应用程序性能的文章,本文旨在深入理解PHP-FPM进程池,以及如何使用进程池进行PHP应用程序优化。 什么是PHP-FPM进程池 PHP-FPM(FastCGI Process Manager)是PHP FastCGI进程管理器的一个变种。它用于管理FastCGI进程,并为每个请求分配可用的进程。PHP…

    PHP 2023年5月27日
    00
  • PHP判断字符串长度的两种方法很实用

    当我们使用PHP编写代码时,经常需要判断字符串的长度。本文将为大家介绍两种实用的PHP判断字符串长度的方法。 方法一:strlen()函数 strlen()函数用于计算一个字符串的长度,返回的是该字符串的字符数。使用该函数,我们可以方便地判断字符串的长度。 <?php $str1 = "Hello, world!"; $str2 =…

    PHP 2023年5月26日
    00
  • php 操作数组(合并,拆分,追加,查找,删除等)

    PHP是一种非常流行的Web开发语言,也是一个极其灵活的语言,它能够进行各种数据操作,其中最常见的操作就是对数组进行操作。下面是一些对PHP数组进行常见操作的攻略,包括合并数组、拆分数组、追加元素、查找元素及删除元素等。 合并数组 在PHP中,有多种方法可以合并数组,其中最简便的方法是使用array_merge()函数。该函数可以将两个或多个数组合并成一个数…

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