欢迎访问宙启技术站
智能推送

PHP加密解密函数:10个 实践示例

发布时间:2023-06-24 19:00:57

实现数据加密和解密是程序开发过程中至关重要的一环。PHP作为一种常用的Web编程语言,提供了多种加密解密函数来帮助开发人员实现数据加密解密功能。在这篇文章中,我们将为大家介绍10个PHP加密解密函数 实践示例。

1. md5()

md5()函数是一个广泛使用的散列函数,它将任意大小的数据映射为固定大小的散列值。该函数需要一个字符串参数,返回一个32个字符的散列值。使用md5()函数,可以对密码和其他敏感数据进行简单的加密。

示例代码:

$password = '123456';

$encrypted_password = md5($password);

2. sha1()

sha1()是另一个用于加密字符串的散列函数。它采用长度为160位的SHA-1算法来生成散列值。与md5()函数不同,sha1()函数生成的散列值更难以破解,可用于更高级别的数据保护。

示例代码:

$password = '123456';

$encrypted_password = sha1($password);

3. OpenSSL库

OpenSSL库是一个可用于加密和解密数据的开源软件包。PHP支持OpenSSL库,可通过以下代码来实现加密和解密。

示例代码:

$plaintext = 'This is a secret message.';

$key = 'mysecretkey';

$encryption_method = 'aes-256-cbc';

//加密

$encrypted = openssl_encrypt($plaintext, $encryption_method, $key, 0, '1234567891011121');

echo "加密结果: $encrypted<br />";

//解密

$decrypted = openssl_decrypt($encrypted, $encryption_method, $key, 0, '1234567891011121');

echo "解密结果: $decrypted<br />";

4. base64_encode()和base64_decode()

base64_encode()函数将二进制数据转换为可读的ASCII字符串。base64_decode()函数执行相反的操作,并将base64编码的数据还原为原始二进制数据。这些函数通常用于将二进制数据存储在数据库或文件中,以提高数据的可读性。

示例代码:

$plain_text = 'This is a secret message.';

$base64_text = base64_encode($plain_text);

echo "base64加密结果: $base64_text<br />";

$decoded_text = base64_decode($base64_text);

echo "base64解密结果: $decoded_text<br />";

5. mcrypt_encrypt()和mcrypt_decrypt()

mcrypt_encrypt()和mcrypt_decrypt()函数在PHP 7.2+中已废弃,请使用OpenSSL库替代。 它们用于对数据进行加密和解密。可以使用不同的算法,如AES,Blowfish,RC4等。可以使用mcrypt_get_iv_size()和mcrypt_create_iv()函数生成初始化向量。

示例代码:

$plain_text = 'This is a secret message.';

$key = 'mysecretkey';

$iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_CFB);

$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);

//加密

$encrypted = mcrypt_encrypt(MCRYPT_BLOWFISH, $key, $plain_text, MCRYPT_MODE_CFB, $iv);

echo "加密结果: $encrypted<br />";

//解密

$decrypted = mcrypt_decrypt(MCRYPT_BLOWFISH, $key, $encrypted, MCRYPT_MODE_CFB, $iv);

echo "解密结果: $decrypted<br />";

6. sodium_crypto_pwhash()

sodium_crypto_pwhash()函数是PHP 7.2+中新加入的一种密码哈希函数。它使用Argon2I算法,并提供可配置的参数来控制哈希的安全强度和计算时间。它通常用于密码存储,以保护用户账户免受恶意攻击。

示例代码:

$password = '123456';

$hash = sodium_crypto_pwhash_str($password, SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE, SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE);

echo "密码哈希结果: $hash<br />";

7. sodium_crypto_secretbox()

sodium_crypto_secretbox()函数可以对数据进行加密和解密,使用的是XSalsa20加密算法。它需要一个秘密密钥和一个随机生成的nonce,以便安全地加密和解密数据。

示例代码:

$plain_text = 'This is a secret message.';

$key = 'mysecretkey';

$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);

//加密

$encrypted = sodium_crypto_secretbox($plain_text, $nonce, $key);

echo "加密结果: $encrypted<br />";

//解密

$decrypted = sodium_crypto_secretbox_open($encrypted, $nonce, $key);

echo "解密结果: $decrypted<br />";

8. sodium_crypto_aead_xchacha20poly1305_ietf_encrypt()和sodium_crypto_aead_xchacha20poly1305_ietf_decrypt()

sodium_crypto_aead_xchacha20poly1305_ietf_encrypt()和sodium_crypto_aead_xchacha20poly1305_ietf_decrypt()函数在PHP 7.2+中被加入,可实现加密和解密。这些函数使用XChaCha20-Poly1305加密算法,并提供密钥,随机生成的nonce和附加数据。

示例代码:

$plain_text = 'This is a secret message.';

$key = sodium_crypto_secretbox_keygen();

$nonce = random_bytes(SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES);

$ad = 'Additional Data';

//加密

$encrypted = sodium_crypto_aead_xchacha20poly1305_ietf_encrypt($plain_text, $ad, $nonce, $key);

echo "加密结果: $encrypted<br />";

//解密

$decrypted = sodium_crypto_aead_xchacha20poly1305_ietf_decrypt($encrypted, $ad, $nonce, $key);

echo "解密结果: $decrypted<br />";

9. Sodium库

Sodium库是一个用于加密和解密数据的精简,易于使用的库。Sodium库在PHP 7.2+中已经成为默认的扩展库,可以使用它来实现加密和解密。

示例代码:

$plain_text = 'This is a secret message.';

$key = sodium_crypto_secretbox_keygen();

$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);

//加密

$encrypted = sodium_crypto_secretbox($plain_text, $nonce, $key);

echo "加密结果: $encrypted<br />";

//解密

$decrypted = sodium_crypto_secretbox_open($encrypted, $nonce, $key);

echo "解密结果: $decrypted<br />";

10. password_hash()和password_verify()

password_hash()和password_verify()是PHP 5.5+中引入的两个函数,它们可用于对密码进行安全哈希和验证。它们使用bcrypt算法,并提供了一种易于使用的方式来防止常见的密码攻击,如暴力破解和彩虹表攻击。

示例代码:

$password = '123456';

//加密

$hash = password_hash($password, PASSWORD_DEFAULT);

echo "密码哈希结果: $hash<br />";

//检查

$check = password_verify($password, $hash);

if ($check) {

    echo '密码正确';

} else {

    echo '密码错误';

}

在进行数据加密和解密时,必须遵循正确的实践方法,并使用可靠的加密算法。这些示例代码可以帮助你理解和使用PHP中可用的不同加密解密函数。