1. 哈希算法 (MD5、SHA-256):
常用的MD5、SHA-256 常用于密码存储和数据完整性验证,哈希算法结果单向不可逆,加密后无法还原数据,只能用于数据完整性验证,弱哈希算法的易破解性,如果不进行多层次加密,容易被碰撞攻击,被暴力破解或彩虹表攻击破解出原始数据。建议多层次加密并使用不同加盐值。
<?php
// 明文字符串
$plaintext = "hello world";
$salt = "abcd";
// 加盐:将盐值添加到密码的前后
$saltyPassword = $salt . $password; // 可以将盐值添加到密码的开头或结尾,选择任意
// 生成 MD5 哈希值
$hash = md5($plaintext);
?>
2. 对称加密 (AES-256)
PHP中通常使用 AES 算法(AES-256),通过 openssl 扩展实现,对称加密使用同一个密钥进行加密和解密,密钥的管理和分发成为主要问题。因为加密解密双端都存储有相同的密钥,可能会遭遇泄露风险,并注意IV初始化向量的使用。
<?php
function encrypt($data, $key) {
$iv = random_bytes(openssl_cipher_iv_length('aes-256-cbc'));
$encrypted = openssl_encrypt($data, 'aes-256-cbc', $key, 0, $iv);
return base64_encode($iv . $encrypted);
}
function decrypt($data, $key) {
$data = base64_decode($data);
$ivLength = openssl_cipher_iv_length('aes-256-cbc');
$iv = substr($data, 0, $ivLength);
$encryptedData = substr($data, $ivLength);
return openssl_decrypt($encryptedData, 'aes-256-cbc', $key, 0, $iv);
}
$key = "your-secret-key";
$originalData = "Sensitive Data";
$encryptedData = encrypt($originalData, $key);
$decryptedData = decrypt($encryptedData, $key);
?>
3. 非对称加密 (RSA)
PHP中非对称加密通常通过 RSA 或 椭圆曲线加密(ECC)算法实现,常用 openssl 或 sodium 扩展, RSA算法在加密和解密操作相比对称加密要慢得多,尤其是高并发环境下更消耗性能,同样RSA加密受密钥长度的影响比较大,通常需要至少2048 位至更长的密钥才能保证安全。然而更长的密钥会进一步增加加密和解密的耗时,影响 PHP 应用的性能。同样可加密的数据大小,受密钥长度限制,2048的密钥长度,能加密的字符串上限约两百多一点,更多就会产生异常。