Home 世界杯图标 常见加密解密算法及其在 PHP 中的实现

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

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

对称加密算法

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

AES(Advanced Encryption Standard):

AES 是一种广泛使用的对称加密算法,支持 128 位、192 位和 256 位密钥长度。

安全性高,性能好,适用于各种应用场景。

DES(Data Encryption Standard):

DES 是一种较早的对称加密算法,使用 56 位密钥。

由于密钥长度较短,安全性较低,已被更安全的算法(如 AES)取代。

3DES(Triple DES):

3DES 是 DES 的增强版,通过三次加密提高安全性。

使用三个 56 位密钥,总共 168 位密钥长度。

Blowfish:

Blowfish 是一种对称加密算法,支持可变长度密钥(32 位到 448 位)。

适用于各种应用场景,性能较好。

Blowfish

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

常见的加密模式

ECB(Electronic Codebook)模式:

每个数据块独立加密。

优点:简单易实现。

缺点:相同的明文块会生成相同的密文块,容易受到模式分析攻击。

CBC(Cipher Block Chaining)模式:

每个数据块在加密前与前一个密文块进行异或操作。

优点:相同的明文块在不同位置会生成不同的密文块,安全性较高。

缺点:需要初始化向量(IV),且加密过程不能并行化。

CFB(Cipher Feedback)模式:

将前一个密文块加密后与当前明文块进行异或操作生成密文。

优点:可以加密小于块大小的数据,适用于流加密。

缺点:需要初始化向量(IV),且加密过程不能并行化。

OFB(Output Feedback)模式:

将前一个加密输出块加密后与当前明文块进行异或操作生成密文。

优点:可以加密小于块大小的数据,适用于流加密。

缺点:需要初始化向量(IV),且加密过程不能并行化。

CTR(Counter)模式:

使用计数器值加密后与明文块进行异或操作生成密文。

优点:可以并行加密,适用于流加密。

缺点:需要唯一的计数器值。

非对称加密算法

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

RSA(Rivest-Shamir-Adleman):

RSA 是一种广泛使用的非对称加密算法,基于大整数分解的数学难题。

公钥用于加密,私钥用于解密,支持数字签名和密钥交换。

ECC(Elliptic Curve Cryptography):

ECC 是一种基于椭圆曲线数学的非对称加密算法。

相对于 RSA,ECC 提供相同安全级别的情况下,密钥长度更短,性能更好。

哈希算法

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

MD5(Message Digest Algorithm 5):

MD5 生成 128 位哈希值,速度快,但已被证明不够安全,容易发生碰撞攻击。

SHA-1(Secure Hash Algorithm 1):

SHA-1 生成 160 位哈希值,安全性较 MD5 高,但也已被证明存在安全漏洞。

SHA-2(Secure Hash Algorithm 2):

SHA-2 包括 SHA-224、SHA-256、SHA-384 和 SHA-512,生成 224 位到 512 位哈希值。

安全性高,广泛应用于各种安全协议和应用。

SHA-3(Secure Hash Algorithm 3):

SHA-3 是 SHA 系列的最新成员,基于 Keccak 算法,提供更高的安全性。

示例代码

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

Blowfish CBC(使用 OpenSSL)

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)

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)

// 生成密钥对

$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 哈希

$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/