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实现的AES 128位加密算法示例

    下面我将详细讲解“PHP实现的AES 128位加密算法示例”的完整攻略。 简介 AES是一种对称加密算法,是目前广泛使用的加密算法之一,其中AES-128是AES算法中使用的一种密钥长度为128位的加密方式。在PHP中,可以使用mcrypt扩展程序来实现AES-128加密算法的加密和解密操作。 准备工作 在使用PHP实现AES-128加密算法之前,需要确保已…

    PHP 2023年5月26日
    00
  • php中输出json对象的值(实现方法)

    在 PHP 中,可以使用 json_encode() 函数将数组或对象转换为 JSON 格式的字符串。而输出 JSON 对象的值可以通过将 JSON 格式字符串转换为 PHP 对象或数组,然后使用对象或数组中的属性或键值来获取值。 以下是输出 JSON 对象的值的实现方法: 1. 将 JSON 格式字符串转换为 PHP 对象 首先,使用 json_decod…

    PHP 2023年5月26日
    00
  • YII Framework的filter过滤器用法分析

    YII Framework的filter过滤器用法分析 什么是filter过滤器? YII Framework中的filter过滤器是一个非常实用的功能。通过使用filters,我们可以拦截控制器的操作,并对请求或相应进行处理。这个过程有点像middleware,它可以用来执行许多有用的操作,比如数据验证、数据过滤、数据和响应编码,甚至是权限验证等。 如何使…

    PHP 2023年5月26日
    00
  • 简单介绍PHP非阻塞模式

    当请求后端服务器时,传统的做法是一直等待直到后端返回数据,然后再进行下一个请求。而PHP非阻塞模式可以让程序在等待请求返回的同时,进行其他的操作,并且能够让多个请求同时发出,这种模式适用于需要处理高并发、高吞吐量的场景。以下是PHP非阻塞模式的详细讲解: 什么是PHP非阻塞模式? PHP非阻塞模式是一种异步IO的编程模式,相比传统的同步IO模式,能够在等待请…

    PHP 2023年5月27日
    00
  • php统计数组元素个数的方法

    PHP 提供了多种统计数组元素个数的方法,以下是常用的几种方法: 方法一:count() 函数 PHP 中可以使用 count() 函数来统计数组元素的数量。count() 函数返回数组的长度,即元素的个数。 示例代码: $fruits = array("apple", "banana", "orange&q…

    PHP 2023年5月26日
    00
  • 基于php常用函数总结(数组,字符串,时间,文件操作)

    基于 PHP 常用函数总结 本文总结了 PHP 中常用的数组、字符串、时间、文件操作等函数。这些函数在 PHP 中使用频率很高,熟练掌握这些函数可以提高 PHP 开发效率。 数组操作 PHP 中的数组是一个非常强大的数据结构,以下是常用的数组操作函数: array_unique array_unique 函数从数组中移除重复的值,并返回一个新的不包含重复值的…

    PHP 2023年5月26日
    00
  • PHP中的生成XML文件的4种方法分享

    下面就是“PHP中的生成XML文件的4种方法分享”的完整攻略。 1. 概述 XML全称为Extensible Markup Language,即可扩展标记语言。它是一种类似于HTML的标记语言。一种语言的类型是通过描述该语言文本的语法和语义规则来确定的,XML就属于这种类型。 在PHP中生成XML文件是一项非常重要的任务,它允许我们使用结构化的数据,在没有任…

    PHP 2023年5月26日
    00
  • PHP计算加权平均数的方法

    PHP计算加权平均数的方法 加权平均数的基本概念 加权平均数是指在统计学中,为了准确地反映不同数据的重要性,每个数据有一个权重或者重要性系数,这些权重或重要性系数一般是人为指定的,最后将所有数据加权后再进行平均计算,得到加权平均数。 PHP实现加权平均数的方法 PHP实现加权平均数可以通过计算公式实现,公式是对于给定的权重数组$weights和数值数组 $v…

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