PHP函数-加密解密方法
发布时间:2023-11-27 11:25:04
PHP提供了很多加密解密方法,可以用于对敏感数据进行保护和传输。下面将介绍几种常用的加密解密方法。
1. 对称加密方法
对称加密方法使用相同的密钥对数据进行加密和解密。常见的对称加密算法有DES、AES等。使用对称加密方法时,需要确保密钥的安全性。
示例代码如下:
function encrypt($data, $key) {
$encrypted = openssl_encrypt($data, 'AES-128-ECB', $key, OPENSSL_RAW_DATA);
return base64_encode($encrypted);
}
function decrypt($encrypted, $key) {
$encrypted = base64_decode($encrypted);
return openssl_decrypt($encrypted, 'AES-128-ECB', $key, OPENSSL_RAW_DATA);
}
$key = 'my_key';
$data = 'Hello World';
$encrypted = encrypt($data, $key);
$decrypted = decrypt($encrypted, $key);
echo 'Encrypted: ' . $encrypted . '<br>';
echo 'Decrypted: ' . $decrypted . '<br>';
2. 非对称加密方法
非对称加密方法使用公钥进行加密,私钥进行解密。常见的非对称加密算法有RSA。非对称加密方法比对称加密方法更安全,可以用于数据传输过程中。
示例代码如下:
function encrypt($data, $publicKey) {
openssl_public_encrypt($data, $encrypted, $publicKey);
return base64_encode($encrypted);
}
function decrypt($encrypted, $privateKey) {
$encrypted = base64_decode($encrypted);
openssl_private_decrypt($encrypted, $decrypted, $privateKey);
return $decrypted;
}
$publicKey = openssl_pkey_get_public(file_get_contents('public.pem'));
$privateKey = openssl_pkey_get_private(file_get_contents('private.pem'));
$data = 'Hello World';
$encrypted = encrypt($data, $publicKey);
$decrypted = decrypt($encrypted, $privateKey);
echo 'Encrypted: ' . $encrypted . '<br>';
echo 'Decrypted: ' . $decrypted . '<br>';
3. 散列加密方法
散列加密方法是一种不可逆的加密方法,将数据转换为固定长度的散列值。常见的散列加密算法有MD5和SHA-1。散列加密方法常用于验证密码。
示例代码如下:
function hashPassword($password) {
return sha1(md5($password));
}
$password = '123456';
$hashedPassword = hashPassword($password);
echo 'Hashed Password: ' . $hashedPassword . '<br>';
4. 对称加密与非对称加密的组合
对称加密和非对称加密都有各自的优点和缺点。为了兼顾安全性和效率,可以将两者结合使用。首先使用非对称加密方法加密对称加密的密钥,然后使用对称加密方法加密数据。
示例代码如下:
function encryptSymmetric($data, $key) {
$encrypted = openssl_encrypt($data, 'AES-128-ECB', $key, OPENSSL_RAW_DATA);
return base64_encode($encrypted);
}
function decryptSymmetric($encrypted, $key) {
$encrypted = base64_decode($encrypted);
return openssl_decrypt($encrypted, 'AES-128-ECB', $key, OPENSSL_RAW_DATA);
}
function encryptAsymmetric($data, $publicKey) {
openssl_public_encrypt($data, $encrypted, $publicKey);
return base64_encode($encrypted);
}
function decryptAsymmetric($encrypted, $privateKey) {
$encrypted = base64_decode($encrypted);
openssl_private_decrypt($encrypted, $decrypted, $privateKey);
return $decrypted;
}
$symmetricKey = 'my_key';
$data = 'Hello World';
$publicKey = openssl_pkey_get_public(file_get_contents('public.pem'));
$privateKey = openssl_pkey_get_private(file_get_contents('private.pem'));
$encryptedSymmetricKey = encryptAsymmetric($symmetricKey, $publicKey);
$decryptedSymmetricKey = decryptAsymmetric($encryptedSymmetricKey, $privateKey);
$encryptedData = encryptSymmetric($data, $decryptedSymmetricKey);
$decryptedData = decryptSymmetric($encryptedData, $decryptedSymmetricKey);
echo 'Encrypted Data: ' . $encryptedData . '<br>';
echo 'Decrypted Data: ' . $decryptedData . '<br>';
上述就是几种常用的PHP加密解密方法,可以根据实际需求选择合适的方法进行数据保护和传输。
