PHP实现的简单AES加密解密算法实例

下面是对于“PHP实现的简单AES加密解密算法实例”的完整攻略,主要包括以下几个部分:

  1. 材料准备
  2. 算法实现
  3. 示例说明

1. 材料准备

在开始实现之前,需要确保已经安装好了 PHP 环境,并且可以使用 PHP 命令行工具进行脚本测试。

此外,我们还需要依赖一个 OpenSSL 扩展库,因此需要使用命令安装 OpenSSL 扩展库:

$ sudo apt-get install php-openssl

2. 算法实现

针对 AES 加密算法,我们可以使用 PHP 提供的 openssl_encryptopenssl_decrypt 函数分别实现加密和解密的操作。

具体的使用方式如下:

$encrypted = openssl_encrypt($data, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv);
$decrypted = openssl_decrypt($data, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv);

其中,$data 为待加密或解密的数据,$key 为加密解密使用的密钥,$iv 则为初始化向量,这三个参数都是二进制字符串的形式。

值得注意的是,受限于 PHP 语言本身的限制,在使用 AES-128 加密算法时,密钥长度必须为 16 个字节。

在实际应用中,为了防止密钥泄露,在存储密钥时一般采用 Hash 函数生成固定长度的密钥值,而后将其用作实际的密钥值。

此外,在使用 AES 加密算法时,一般会采用 CBC 模式,同时会提供一个初始化向量参数,目的是防止明文相同的情况下,加密后产生相同的密文,从而增加加密的安全性。

3. 示例说明

以下是两个简单的示例,用于说明如何使用 PHP 实现 AES 加密解密算法。

示例 1:字符串加解密

function aesEncrypt($data, $key) {
    $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-128-cbc'));
    $encrypted = openssl_encrypt($data, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv);
    return base64_encode($iv . $encrypted);
}

function aesDecrypt($data, $key) {
    $data = base64_decode($data);
    $iv = substr($data, 0, openssl_cipher_iv_length('aes-128-cbc'));
    $encrypted = substr($data, openssl_cipher_iv_length('aes-128-cbc'));
    return openssl_decrypt($encrypted, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv);
}

// 测试
$data = 'Hello, world!';
$key = 'My secret key';
$encrypted = aesEncrypt($data, $key);
$decrypted = aesDecrypt($encrypted, $key);

echo "PlainText:  $data\n";
echo "Encrypted:   $encrypted\n";
echo "Decrypted:   $decrypted\n";

示例 2:文件加解密

function fileEncrypt($sourceFile, $destFile, $key) {
    // 读取源文件内容
    $data = file_get_contents($sourceFile);

    // 加密数据
    $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-128-cbc'));
    $encrypted = openssl_encrypt($data, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv);
    $encrypted = $iv . $encrypted;

    // 写入目标文件
    file_put_contents($destFile, $encrypted);
}

function fileDecrypt($sourceFile, $destFile, $key) {
    // 读取密文内容
    $raw = file_get_contents($sourceFile);

    // 解密数据
    $iv = substr($raw, 0, openssl_cipher_iv_length('aes-128-cbc'));
    $data = substr($raw, openssl_cipher_iv_length('aes-128-cbc'));
    $decrypted = openssl_decrypt($data, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv);

    // 写入目标文件
    file_put_contents($destFile, $decrypted);
}

// 测试
$sourceFile = 'test.txt';
$encryptedFile = 'test.enc';
$decryptedFile = 'test.dec';
$key = 'My secret key';

// 创建测试原文件
file_put_contents($sourceFile, 'Hello, world!');

// 加密文件
fileEncrypt($sourceFile, $encryptedFile, $key);

// 解密文件
fileDecrypt($encryptedFile, $decryptedFile, $key);

// 测试结果
echo "PlainText:  " . file_get_contents($sourceFile) . "\n";
echo "Encrypted:  " . base64_encode(file_get_contents($encryptedFile)) . "\n";
echo "Decrypted:  " . file_get_contents($decryptedFile) . "\n";

以上例子分别演示了字符串和文件加解密的用法,供大家参考。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP实现的简单AES加密解密算法实例 - Python技术站

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

相关文章

  • 浅析PHP页面局部刷新功能的实现小结

    浅析PHP页面局部刷新功能的实现小结 简介 页面局部刷新是指页面上只有一部分内容发生改变,而其余部分不发生改变的一种刷新方式。相对于整个页面刷新,局部刷新可以提升用户体验,减少资源浪费。 在PHP中,实现页面局部刷新的方式有很多种,本文将对其中一些主要的方式进行分析和总结。 1. Ajax Ajax(Asynchronous JavaScript and X…

    PHP 2023年5月27日
    00
  • php实现通过ftp上传文件

    通过 FTP(File Transfer Protocol)上传文件是一种常见的操作,可以通过 PHP 实现,下面详细讲解如何通过 PHP 实现通过 FTP 上传文件。 安装 FTP 扩展 在 PHP 中实现 FTP 上传文件需要安装 FTP 扩展,并在 PHP 配置文件中启用该扩展。如果您使用的是 Linux 系统,则可以通过以下命令安装 FTP 扩展: …

    PHP 2023年5月26日
    00
  • PHP编程中的Session阻塞问题与解决方法分析

    PHP编程中的Session阻塞问题与解决方法分析 什么是Session阻塞问题 在基于Web的应用程序中,服务器需要保持一些用户相关的状态信息,这些信息可以被存储在Session中。然而,PHP编程中存在一种问题,称为Session阻塞问题,当一个用户正在执行需要较长时间处理的请求时,其他用户将无法访问该站点上的其他页面,直到这个请求完成。 这是因为PHP…

    PHP 2023年5月27日
    00
  • php使用curl存储cookie的示例

    使用cURL可以模拟网页的登录操作并存储cookie。存储cookie后,可以通过cookie来保持登录状态,发送请求等操作。下面是详细的攻略说明: 1.通过cURL获取cookie 在使用cURL请求网页的过程中,可以通过设置curl的CURLOPT_COOKIEJAR参数来指定存储cookie的文件路径。例如: $url = ‘http://exampl…

    PHP 2023年5月27日
    00
  • php中怎么搜索相关联数组键值及获取之

    在PHP中,可以使用array_keys()和array_values()函数分别获取数组的键和值,然后使用array_search()函数查找特定的键或值在数组中的位置。以下是具体的步骤: 第一步:创建一个关联数组 首先,我们需要创建一个关联数组,作为实验对象,以便演示如何搜索相关联数组的键值。例如: $students = array( "Jo…

    PHP 2023年5月26日
    00
  • PHP实现加密的几种方式介绍

    PHP实现加密的几种方式介绍 在Web应用程序中,数据的安全性一直是非常重要的问题。为了确保数据的安全性,很多应用程序都会使用加密技术来保护数据。PHP提供了多种加密技术,本文将介绍几种常用的加密方式以及它们的用途和示例。 哈希算法加密 哈希算法是将任意长度的消息压缩成固定长度的一段代码的函数。这个函数可以将任意长度的消息计算为一个短而且固定的长度,称之为哈…

    PHP 2023年5月23日
    00
  • PHP终止脚本运行三种实现方法详解

    PHP终止脚本运行三种实现方法详解 1. die() 函数 die() 是 PHP 中常用的终止脚本运行的函数之一。它允许我们在代码的任何部分停止脚本的执行并输出一条消息。 <?php // 输出消息并停止脚本运行 die("程序结束!"); // 下面的代码不会被执行 echo "Hello World!"; …

    PHP 2023年5月23日
    00
  • PHP实现机器学习之朴素贝叶斯算法详解

    PHP实现机器学习之朴素贝叶斯算法详解 什么是朴素贝叶斯算法? 朴素贝叶斯算法是一种基于贝叶斯定理的分类算法,其基本思想是通过计算样本的特征与每个分类类别之间的条件概率,来选择最大概率的类别作为预测结果。 朴素贝叶斯算法的实现需要以下步骤: 计算先验概率,即每一类别在样本中出现的概率; 计算每个特征对于每一类别的条件概率; 根据计算结果对未知数据进行分类预测…

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