首页 > 编程语言 >常见加密解密算法及其在 PHP 中的实现

常见加密解密算法及其在 PHP 中的实现

时间:2024-07-04 20:55:14浏览次数:19  
标签:加密 e5% 解密 SHA 算法 哈希 PHP 加密算法

加密和解密算法在信息安全中起着至关重要的作用。以下是一些常见的加密和解密算法,包括对称加密、非对称加密和哈希算法。

对称加密算法

对称加密算法使用相同的密钥进行加密和解密。常见的对称加密算法包括:

  1. AES(Advanced Encryption Standard)
    • AES 是一种广泛使用的对称加密算法,支持 128 位、192 位和 256 位密钥长度。
    • 安全性高,性能好,适用于各种应用场景。
  2. DES(Data Encryption Standard)
    • DES 是一种较早的对称加密算法,使用 56 位密钥。
    • 由于密钥长度较短,安全性较低,已被更安全的算法(如 AES)取代。
  3. 3DES(Triple DES)
    • 3DES 是 DES 的增强版,通过三次加密提高安全性。
    • 使用三个 56 位密钥,总共 168 位密钥长度。
  4. Blowfish
    • Blowfish 是一种对称加密算法,支持可变长度密钥(32 位到 448 位)。
    • 适用于各种应用场景,性能较好。

Blowfish

Blowfish 加密算法支持多种加密模式,每种模式在处理数据块时的方式有所不同。以下是 Blowfish 算法常见的加密模式:

常见的加密模式

  1. ECB(Electronic Codebook)模式
    • 每个数据块独立加密。
    • 优点:简单易实现。
    • 缺点:相同的明文块会生成相同的密文块,容易受到模式分析攻击。
  2. CBC(Cipher Block Chaining)模式
    • 每个数据块在加密前与前一个密文块进行异或操作。
    • 优点:相同的明文块在不同位置会生成不同的密文块,安全性较高。
    • 缺点:需要初始化向量(IV),且加密过程不能并行化。
  3. CFB(Cipher Feedback)模式
    • 将前一个密文块加密后与当前明文块进行异或操作生成密文。
    • 优点:可以加密小于块大小的数据,适用于流加密。
    • 缺点:需要初始化向量(IV),且加密过程不能并行化。
  4. OFB(Output Feedback)模式
    • 将前一个加密输出块加密后与当前明文块进行异或操作生成密文。
    • 优点:可以加密小于块大小的数据,适用于流加密。
    • 缺点:需要初始化向量(IV),且加密过程不能并行化。
  5. CTR(Counter)模式
    • 使用计数器值加密后与明文块进行异或操作生成密文。
    • 优点:可以并行加密,适用于流加密。
    • 缺点:需要唯一的计数器值。

非对称加密算法

非对称加密算法使用一对密钥(公钥和私钥)进行加密和解密。常见的非对称加密算法包括:

  1. RSA(Rivest-Shamir-Adleman)
    • RSA 是一种广泛使用的非对称加密算法,基于大整数分解的数学难题。
    • 公钥用于加密,私钥用于解密,支持数字签名和密钥交换。
  2. ECC(Elliptic Curve Cryptography)
    • ECC 是一种基于椭圆曲线数学的非对称加密算法。
    • 相对于 RSA,ECC 提供相同安全级别的情况下,密钥长度更短,性能更好。

哈希算法

哈希算法用于生成固定长度的哈希值(摘要),常用于数据完整性校验和密码存储。常见的哈希算法包括:

  1. MD5(Message Digest Algorithm 5)
    • MD5 生成 128 位哈希值,速度快,但已被证明不够安全,容易发生碰撞攻击。
  2. SHA-1(Secure Hash Algorithm 1)
    • SHA-1 生成 160 位哈希值,安全性较 MD5 高,但也已被证明存在安全漏洞。
  3. SHA-2(Secure Hash Algorithm 2)
    • SHA-2 包括 SHA-224、SHA-256、SHA-384 和 SHA-512,生成 224 位到 512 位哈希值。
    • 安全性高,广泛应用于各种安全协议和应用。
  4. SHA-3(Secure Hash Algorithm 3)
    • SHA-3 是 SHA 系列的最新成员,基于 Keccak 算法,提供更高的安全性。

示例代码

以下是一些常见加密和解密算法的示例代码,使用 PHP 实现。

Blowfish CBC(使用 OpenSSL)

<?php
function blowfishEncryptCBC($data, $key) {
    $method = 'bf-cbc'; // Blowfish CBC 模式
    $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($method));
    $encrypted = openssl_encrypt($data, $method, $key, OPENSSL_RAW_DATA, $iv);
    return base64_encode($iv . $encrypted);
}

function blowfishDecryptCBC($data, $key) {
    $method = 'bf-cbc'; // Blowfish CBC 模式
    $data = base64_decode($data);
    $ivLength = openssl_cipher_iv_length($method);
    $iv = substr($data, 0, $ivLength);
    $encrypted = substr($data, $ivLength);
    return openssl_decrypt($encrypted, $method, $key, OPENSSL_RAW_DATA, $iv);
}

// 示例用法
$key = 'your-encryption-key';
$data = 'Hello, World!';

$encrypted = blowfishEncryptCBC($data, $key);
echo "Encrypted (CBC): $encrypted\n";

$decrypted = blowfishDecryptCBC($encrypted, $key);
echo "Decrypted (CBC): $decrypted\n";
?>

 

AES 加密和解密(使用 OpenSSL)

<?php
function aesEncrypt($data, $key) {
    $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
    $encrypted = openssl_encrypt($data, 'aes-256-cbc', $key, 0, $iv);
    return base64_encode($iv . $encrypted);
}

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

$key = 'your-encryption-key';
$data = 'Hello, World!';

$encrypted = aesEncrypt($data, $key);
echo "Encrypted: $encrypted\n";

$decrypted = aesDecrypt($encrypted, $key);
echo "Decrypted: $decrypted\n";
?>

RSA 加密和解密(使用 OpenSSL)

<?php
// 生成密钥对
$privateKey = openssl_pkey_new(array(
    'private_key_bits' => 2048,
    'private_key_type' => OPENSSL_KEYTYPE_RSA,
));
$publicKey = openssl_pkey_get_details($privateKey)['key'];

// 加密
$data = 'Hello, World!';
openssl_public_encrypt($data, $encrypted, $publicKey);
$encrypted = base64_encode($encrypted);
echo "Encrypted: $encrypted\n";

// 解密
$encrypted = base64_decode($encrypted);
openssl_private_decrypt($encrypted, $decrypted, $privateKey);
echo "Decrypted: $decrypted\n";
?>

SHA-256 哈希

<?php
$data = 'Hello, World!';
$hash = hash('sha256', $data);
echo "SHA-256 Hash: $hash\n";
?>

总结

  • 对称加密算法:AES、DES、3DES、Blowfish 等。
  • 非对称加密算法:RSA、ECC 等。
  • 哈希算法:MD5、SHA-1、SHA-2、SHA-3 等。

 

原文链接:https://www.ryanzoe.top/%e5%8a%a0%e5%af%86%e8%a7%a3%e5%af%86/%e5%b8%b8%e8%a7%81%e5%8a%a0%e5%af%86%e8%a7%a3%e5%af%86%e7%ae%97%e6%b3%95%e5%8f%8a%e5%85%b6%e5%9c%a8-php-%e4%b8%ad%e7%9a%84%e5%ae%9e%e7%8e%b0/

 

标签:加密,e5%,解密,SHA,算法,哈希,PHP,加密算法
From: https://www.cnblogs.com/ryanzheng/p/18284641

相关文章

  • HMAC SHA256对称加密
    HMACSHA256是一种对称加密算法。以下是关于HMACSHA256以及对称加密和非对称加密的详细解释:HMACSHA256HMAC(Hash-basedMessageAuthenticationCode)是一种基于哈希函数的消息认证码,它通过结合一个秘密密钥和一个哈希算法来生成消息摘要,从而验证消息的完整性和真实性。HMAC......
  • CAD图纸加密软件哪个好用:八款顶尖CAD图纸加密软件大盘点!
     在工程设计领域,CAD图纸是设计师们的智慧结晶,承载着项目的核心技术和创新思路。然而,随着信息时代的到来,图纸的安全问题日益凸显。如何有效保护CAD图纸不被非法复制、篡改或泄露,成为了每个企业和设计师必须面对的重要课题。 今天为大家盘点八款顶尖CAD图纸加密软件,助您守......
  • mflac音频是什么音频格式?有没有mflac格式解密工具?
    MFLAC 音频是一种无损压缩音频格式。它是基于 FLAC(Free Lossless Audio Codec)无损音频编码标准的一种实现版本或变体,旨在通过无损压缩算法将音频文件压缩到较小的体积,同时保持音频的原始质量,不引入任何失真。MFLAC是什么音乐格式MFLAC格式基于FLAC(Free Lossless A......
  • PHP桶排序:优化大数据集的高效算法解析与实践
    本文由ChatMoney团队出品本文将介绍一种在PHP中实现的高效排序算法——桶排序。通过使用桶排序,可以快速地对大数据集进行排序,特别是在数据分布均匀的情况下。文章将简要介绍桶排序的原理,并给出一个具体的PHP实现示例。一、桶排序原理桶排序(BucketSort)是一种将待排序数......
  • PHP桶排序:高效处理大数据集的算法解析与实现
    本文由ChatMoney团队出品本文将介绍一种在PHP中实现的高效排序算法——桶排序。通过使用桶排序,可以快速地对大数据集进行排序,特别是在数据分布均匀的情况下。文章将简要介绍桶排序的原理,并给出一个具体的PHP实现示例。一、桶排序原理桶排序(BucketSort)是一种将待排序数......
  • PHP反序列化字符逃逸详解
    这段时间遇到几个关于反序列化的字符逃逸的程序,今天来分享一下经验。<?phpfunctionfilter($str){returnstr_replace('bb','ccc',$str);}classA{public$name='aaaa';public$pass='123456';}$AA=newA();$res=filter(serialize($AA));$c=unserial......
  • PHP网上花店管理系统-计算机毕设定制-附项目源码(可白嫖) 21170
    目 录摘要1绪论1.1研究背景1.2项目背景1.3Thinkphp框架介绍1.4论文结构与章节安排2 网上花店管理系统系统分析2.1可行性分析2.2系统流程分析2.2.1数据增加流程2.2.2数据修改流程2.2.3数据删除流程2.3系统功能分析2.3.1功能性分析2.3.......
  • 禅道二次开发——禅道zentaoPHP框架扩展机制——对控制层扩展
    对现有模块的control层的扩展有两种,一种是覆盖现有的方法,一种是增加新的方法。下面我们来看下如何进行扩展。......
  • 数据库操作在PHP中是如何进行的?
    在PHP中进行数据库操作主要涉及以下几个步骤:连接数据库:使用mysql_connect()函数建立与MySQL服务器的连接,需要指定服务器地址、用户名和密码。在PHP7.0以后,推荐使用mysqli_connect()或PDO来替代废弃的mysql_connect(),因为它们支持面向对象编程。选择数据库:使用mysql_select......
  • PHP 真的不行了?透过 PHP 的前世今生看真相
    大家好,我是码农先森。1994年我出生在湖南的农村,就在同年加拿大的拉斯姆斯·勒多夫创造了PHP,这时的PHP还只是用Perl编写的CGI脚本。或许是时间的巧合PHP变成了我后半生谋生的手段,当时拉斯姆斯·勒多夫写这些脚本的目的,只是为了统计自己网站的访问者。就是这样一个简单的......