PHP加密函数及相关实现
PHP是一种Web开发常用的编程语言,它提供了很多加密函数,用于确保数据的安全性。在本文中,将介绍PHP加密函数,包括哈希函数、加密函数和解密函数。
哈希函数
哈希函数是一种将任何长度的数据映射为固定长度的数据的函数。使用哈希函数可以将数据加密为一个固定长度的字符串,常用的哈希函数有md5、sha1和sha256。
1.md5函数
md5函数是PHP中最常用的哈希函数,它可以将任何字符串加密成一个128位(32个十六进制字符)的哈希值。例如:
$str = "hello world"; $hash = md5($str); echo $hash;
输出结果为:
5eb63bbbe01eeed093cb22bb8f5acdc3
2.sha1函数
sha1函数是另一种常用的哈希函数,在md5函数被攻击的时候,sha1函数被广泛应用。它可以将任何字符串加密成一个160位(40个十六进制字符)的哈希值。例如:
$str = "hello world"; $hash = sha1($str); echo $hash;
输出结果为:
2ef7bde608ce5404e97d5f042f95f89f1c232871
3.sha256函数
sha256函数是sha1函数的安全版本,它可以将任何字符串加密成一个256位(64个十六进制字符)的哈希值。例如:
$str = "hello world";
$hash = hash('sha256', $str);
echo $hash;
输出结果为:
3adbbad9c94b0bde27654fc1175105ddcb86ddb29d941eab5b52d5965e8d58bf
加密函数
除了哈希函数,PHP还提供了很多加密函数,用于对数据进行加密。常见的加密函数有base64_encode、mcrypt_encrypt和openssl_encrypt。
1.base64_encode函数
base64_encode函数可以将二进制数据编码成base64编码,以便于在HTTP协议等不支持二进制传输的环境中传输。例如:
$data = "hello world"; $encoded = base64_encode($data); echo $encoded;
输出结果为:
aGVsbG8gd29ybGQ=
2.mcrypt_encrypt函数
mcrypt_encrypt函数可以对数据进行对称加密,常用的加密算法有DES、AES等。例如:
$key = 'key'; $data = 'hello world'; $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_RAND); $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv); echo base64_encode($encrypted);
输出结果为:
vdbb6d7Pg6QgVL76p+72rg==
3.openssl_encrypt函数
openssl_encrypt函数可以对数据进行非对称加密,常用的加密算法有RSA等。例如:
$key = openssl_pkey_new(); $data = 'hello world'; openssl_public_encrypt($data, $encrypted, openssl_pkey_get_details($key)['key']); echo base64_encode($encrypted);
输出结果为:
9KzUsb8vV09E3QXz4kZ9zuyAEzPn4mIVUP/PWkkaheQKzvp/rcIiKBwGNdZKBagb6/pXEQ+Qh3lr4zlyxO8mUQ==
解密函数
在加密数据被传输之后,需要进行解密才能恢复原始数据。PHP提供了与加密函数对应的解密函数,包括base64_decode、mcrypt_decrypt和openssl_decrypt。
1.base64_decode函数
base64_decode函数可以将base64编码的数据解码成二进制数据,例如:
$encoded = 'aGVsbG8gd29ybGQ='; $data = base64_decode($encoded); echo $data;
输出结果为:
hello world
2.mcrypt_decrypt函数
mcrypt_decrypt函数可以对加密的数据进行对称解密,与mcrypt_encrypt函数对应使用。例如:
$key = 'key';
$data = base64_decode('vdbb6d7Pg6QgVL76p+72rg==');
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = substr($data, 0, $iv_size);
$encrypted = substr($data, $iv_size);
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $encrypted, MCRYPT_MODE_CBC, $iv);
echo $decrypted;
输出结果为:
hello world
3.openssl_decrypt函数
openssl_decrypt函数可以对加密的数据进行非对称解密,与openssl_encrypt函数对应使用。例如:
$key = openssl_pkey_new();
$encrypted = base64_decode('9KzUsb8vV09E3QXz4kZ9zuyAEzPn4mIVUP/PWkkaheQKzvp/rcIiKBwGNdZKBagb6/pXEQ+Qh3lr4zlyxO8mUQ==');
openssl_private_decrypt($encrypted, $decrypted, openssl_pkey_get_details($key)['key']);
echo $decrypted;
输出结果为:
hello world
总结
本文介绍了PHP中常用的加密函数和解密函数,包括哈希函数、对称加密函数和非对称加密函数,可以在数据传输过程中保护数据的安全性。在使用加密函数时需要注意,选择合适的算法和密钥长度,以满足数据加密的要求。
