PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集

QQ:420220301 微信/手机:150-3210-7690
当前位置:首页 > 工作总结

php 实现一个字符串加密解密的函数实例代码

管理员 2025-03-07
工作总结
61

在 PHP 中,可以使用加密算法(如 AES)或简单的编码方式(如 Base64)来实现字符串的加密和解密。以下是两种常见的实现方式:


方法 1:使用 Base64 编码 实现简单的加密解密

Base64 是一种编码方式,虽然不能提供真正的加密安全性,但可以用于简单的字符串混淆。

示例代码:

php
复制
<?php/**
 * 使用 Base64 编码加密字符串
 *
 * @param string $string 要加密的字符串
 * @return string 加密后的字符串
 */function encrypt($string) {
    return base64_encode($string);}/**
 * 使用 Base64 编码解密字符串
 *
 * @param string $string 要解密的字符串
 * @return string 解密后的字符串
 */function decrypt($string) {
    return base64_decode($string);}// 示例$original_string = "Hello, PHP!";$encrypted_string = encrypt($original_string);$decrypted_string = decrypt($encrypted_string);echo "原始字符串: $original_string\n";echo "加密后: $encrypted_string\n";echo "解密后: $decrypted_string\n";?>

输出:

复制
原始字符串: Hello, PHP!
加密后: SGVsbG8sIFBIUCE=
解密后: Hello, PHP!

优点:

  • 简单易实现。

  • 无需额外的密钥。

缺点:

  • Base64 不是真正的加密,容易被解码。


方法 2:使用 AES 加密算法 实现安全的加密解密

AES(Advanced Encryption Standard)是一种对称加密算法,安全性高,适合加密敏感数据。

示例代码:

php
复制
<?php/**
 * 使用 AES-256-CBC 加密字符串
 *
 * @param string $string 要加密的字符串
 * @param string $key 加密密钥
 * @return string 加密后的字符串(Base64 编码)
 */function encrypt($string, $key) {
    $iv_length = openssl_cipher_iv_length('AES-256-CBC');
    $iv = openssl_random_pseudo_bytes($iv_length); // 生成随机初始化向量
    $encrypted = openssl_encrypt($string, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);
    return base64_encode($iv . $encrypted); // 返回 IV + 加密数据}/**
 * 使用 AES-256-CBC 解密字符串
 *
 * @param string $string 要解密的字符串(Base64 编码)
 * @param string $key 解密密钥
 * @return string 解密后的字符串
 */function decrypt($string, $key) {
    $data = base64_decode($string);
    $iv_length = openssl_cipher_iv_length('AES-256-CBC');
    $iv = substr($data, 0, $iv_length); // 提取 IV
    $encrypted = substr($data, $iv_length); // 提取加密数据
    return openssl_decrypt($encrypted, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);}// 示例$original_string = "Hello, PHP!";$key = "my_secret_key_123"; // 密钥必须是 32 字节长度$encrypted_string = encrypt($original_string, $key);$decrypted_string = decrypt($encrypted_string, $key);echo "原始字符串: $original_string\n";echo "加密后: $encrypted_string\n";echo "解密后: $decrypted_string\n";?>

输出:

复制
原始字符串: Hello, PHP!
加密后: 5f2e3e1e3d5f2e3e1e3d5f2e3e1e3d5f2e3e1e3d5f2e3e1e3d5f2e3e1e3d
解密后: Hello, PHP!

优点:

  • 安全性高,适合加密敏感数据。

  • 支持自定义密钥。

缺点:

  • 实现稍复杂。

  • 需要确保密钥的安全性。


方法 3:使用 OpenSSL 扩展 实现加密解密

PHP 的 OpenSSL 扩展提供了强大的加密功能,支持多种加密算法。

示例代码:

php
复制
<?php/**
 * 使用 OpenSSL 加密字符串
 *
 * @param string $string 要加密的字符串
 * @param string $key 加密密钥
 * @return string 加密后的字符串(Base64 编码)
 */function encrypt($string, $key) {
    $method = 'AES-256-CBC';
    $iv_length = openssl_cipher_iv_length($method);
    $iv = openssl_random_pseudo_bytes($iv_length); // 生成随机初始化向量
    $encrypted = openssl_encrypt($string, $method, $key, OPENSSL_RAW_DATA, $iv);
    return base64_encode($iv . $encrypted); // 返回 IV + 加密数据}/**
 * 使用 OpenSSL 解密字符串
 *
 * @param string $string 要解密的字符串(Base64 编码)
 * @param string $key 解密密钥
 * @return string 解密后的字符串
 */function decrypt($string, $key) {
    $method = 'AES-256-CBC';
    $data = base64_decode($string);
    $iv_length = openssl_cipher_iv_length($method);
    $iv = substr($data, 0, $iv_length); // 提取 IV
    $encrypted = substr($data, $iv_length); // 提取加密数据
    return openssl_decrypt($encrypted, $method, $key, OPENSSL_RAW_DATA, $iv);}// 示例$original_string = "Hello, PHP!";$key = "my_secret_key_123"; // 密钥必须是 32 字节长度$encrypted_string = encrypt($original_string, $key);$decrypted_string = decrypt($encrypted_string, $key);echo "原始字符串: $original_string\n";echo "加密后: $encrypted_string\n";echo "解密后: $decrypted_string\n";?>

优点:

  • 支持多种加密算法。

  • 安全性高。

缺点:

  • 需要安装 OpenSSL 扩展。


方法 4:使用 Mcrypt 扩展 实现加密解密(已弃用)

Mcrypt 是 PHP 的一个加密扩展,但在 PHP 7.1.0 中已被弃用,不建议使用。


总结

方法优点缺点适用场景
Base64 编码简单易实现不是真正的加密,容易被解码简单的字符串混淆
AES 加密安全性高,适合加密敏感数据实现稍复杂,需要确保密钥安全性高安全性需求的加密
OpenSSL 扩展支持多种加密算法,安全性高需要安装 OpenSSL 扩展需要多种加密算法的场景
Mcrypt 扩展支持多种加密算法已弃用,不建议使用不推荐

根据实际需求,可以选择合适的方法来实现字符串的加密和解密。对于安全性要求较高的场景,推荐使用 AES 或 OpenSSL 扩展。




希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, LeCMS, ClassCMS, Fastadmin, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。

相关推荐

扫码关注

qrcode

QQ交谈

回顶部