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

PHP中的加密与解密函数指南

发布时间:2023-06-08 00:28:03

在PHP中,加密和解密是非常重要的功能,用来防止数据在传输和存储中被恶意篡改或窃取。PHP提供了多种加密和解密函数,本文将介绍常见加密和解密函数。

1. MD5加密

MD5加密是PHP中最简单的加密方法之一。MD5是一种哈希算法,可以将任意长度的消息压缩成一个128位(16字节)的消息摘要。使用MD5加密后,相同的明文每次加密生成的结果都是一样的。

使用方法:

$str = 'Hello World';
$encrypted = md5($str);
echo $encrypted;

2. SHA1加密

SHA1加密与MD5加密类似,但是SHA1加密生成的消息摘要更长,为160位(20字节)。相同的明文每次加密生成的结果也是一样的。

使用方法:

$str = 'Hello World';
$encrypted = sha1($str);
echo $encrypted;

3. base64编码

base64编码并不是一种真正的加密算法,它只是将文本经过一定规则转化成一串字符。最常见的应用是将二进制数据转换成可打印的ASCII字符,例如在电子邮件中传输二进制文件。

使用方法:

$str = 'Hello World';
$encrypted = base64_encode($str);
echo $encrypted;

解密方法:

$encrypted = 'SGVsbG8gV29ybGQ=';
$str = base64_decode($encrypted);
echo $str;

4. openssl_encrypt和openssl_decrypt

openssl扩展是PHP中最常用的加密和解密扩展,它支持多种加密算法。openssl_encrypt函数用来加密文本,openssl_decrypt函数用来解密文本。

使用方法:

加密

$plain_text = 'Hello World';
$key = 'MySecretKey';
$cipher = 'AES-128-CBC';

$options = OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING;
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($cipher));

$encrypted = openssl_encrypt($plain_text, $cipher, $key, $options, $iv);
$encrypted = base64_encode($iv . $encrypted);

echo $encrypted;

解密

$ciphertext = 'zjZuxdoJXSV9XkAGylnckw==';
$key = 'MySecretKey';
$cipher = 'AES-128-CBC';

$options = OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING;
$ciphertext = base64_decode($ciphertext);
$iv_length = openssl_cipher_iv_length($cipher);
$iv = substr($ciphertext, 0, $iv_length);
$ciphertext = substr($ciphertext, $iv_length);

$decrypted = openssl_decrypt($ciphertext, $cipher, $key, $options, $iv);

echo $decrypted;

5. Password Hashing API

PHP 5.5及以上版本提供了一组内置的函数,称为“Password Hashing API”,用于加密和校验密码。它提供了一些强大的加密算法,例如bcrypt、argon2等,并且自动管理salt,使得密码更加安全。

使用方法:

加密

$password = 'MyPassword';
$hash = password_hash($password, PASSWORD_DEFAULT);
echo $hash;

校验

$password = 'MyPassword';
$hash = '$2y$10$lKhYMbHvLXSOXRl86tKbkejV06o/NYmdFTI0CvgJF0b10z2VBpFeK';
if (password_verify($password, $hash)) {
    echo 'Password is valid!';
} else {
    echo 'Invalid password.';
}

不同的加密和解密方法适用于不同的场景,开发者需要根据具体需求选择合理的加密和解密函数。同时,加密和解密需要同时进行,否则会导致数据无法处理或无法恢复。