下面是该攻略的详细内容。
下面是该攻略的详细内容。
步骤1:了解加密解密方式
在实现加密解密功能之前,首先需要了解一些常用的加密解密方式。以下是几种常见的加密解密方式:
-
对称加密(Symmetric-Key Encryption):使用相同的密钥进行加密和解密,常见的算法有AES、DES等。
-
非对称加密(Asymmetric-Key Encryption):使用不同的密钥进行加密和解密,常见的算法有RSA、DSA等。
-
哈希加密(Hash Encryption):将明文通过哈希算法转换为固定长度的密文,一般不可逆,常见的算法有MD5、SHA等。
了解这些加密解密方式之后,就可以着手实现具体函数了。
步骤2:实现三个常用加密解密功能函数
实现一:对称加密解密函数
对称加密是使用相同的密钥进行加密和解密,因此需要实现一个加密函数和一个解密函数,同时需要指定密钥和加密算法。以下是一个示例代码:
/**
* 对称加密函数
* @param string $data 要加密的明文
* @param string $key 加密密钥
* @param string $method 加密算法
* @return string 加密后的密文
*/
function encrypt($data, $key, $method = 'AES-128-CBC') {
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($method));
$encrypted = openssl_encrypt($data, $method, $key, OPENSSL_RAW_DATA, $iv);
return base64_encode($iv . $encrypted);
}
/**
* 对称解密函数
* @param string $data 要解密的密文
* @param string $key 解密密钥
* @param string $method 解密算法
* @return string 解密后的明文
*/
function decrypt($data, $key, $method = 'AES-128-CBC') {
$data = base64_decode($data);
$iv_len = openssl_cipher_iv_length($method);
$iv = substr($data, 0, $iv_len);
$encrypted = substr($data, $iv_len);
return openssl_decrypt($encrypted, $method, $key, OPENSSL_RAW_DATA, $iv);
}
以上函数使用openssl库实现,可以指定加密算法、密钥和明文,加密后的结果使用base64编码便于传输和保存。解密过程类似,将密文进行base64解码,然后使用相同的密钥和算法进行解密,得到原始明文。
实现二:非对称加密解密函数
非对称加密需要使用一对密钥进行加密和解密,因此需要实现成对的加密函数和解密函数,同时需要生成一对密钥。以下是一个示例代码:
/**
* 生成公钥和私钥
* @return array 公钥和私钥
*/
function generate_keys() {
$config = array(
"digest_alg" => "sha512",
"private_key_bits" => 2048,
"private_key_type" => OPENSSL_KEYTYPE_RSA,
);
$resource = openssl_pkey_new($config);
openssl_pkey_export($resource, $priv_key);
$pub_key = openssl_pkey_get_details($resource);
$pub_key = $pub_key["key"];
return array('private' => $priv_key, 'public' => $pub_key);
}
/**
* 非对称加密函数
* @param string $data 要加密的明文
* @param string $key 加密密钥
* @return string 加密后的密文
*/
function encrypt($data, $key) {
$encrypted = '';
openssl_public_encrypt($data, $encrypted, $key);
return base64_encode($encrypted);
}
/**
* 非对称解密函数
* @param string $data 要解密的密文
* @param string $key 解密密钥
* @return string 解密后的明文
*/
function decrypt($data, $key) {
$decrypted = '';
$data = base64_decode($data);
openssl_private_decrypt($data, $decrypted, $key);
return $decrypted;
}
以上代码使用openssl库生成一对公钥和私钥,加密过程使用公钥加密,解密过程使用私钥解密,加密后的结果使用base64编码便于传输和保存。
实现三:哈希加密函数
哈希加密是将明文通过哈希算法转换为固定长度的密文,一般不可逆,常见的算法有MD5、SHA等。以下是一个示例代码:
/**
* MD5哈希加密函数
* @param string $data 要加密的明文
* @return string 加密后的密文
*/
function md5_encrypt($data) {
return md5($data);
}
/**
* SHA1哈希加密函数
* @param string $data 要加密的明文
* @return string 加密后的密文
*/
function sha1_encrypt($data) {
return sha1($data);
}
以上代码使用PHP内部函数实现了MD5和SHA1两种哈希加密方式,将传入的字符串作为明文进行加密,返回加密后的结果。这种方式比对称加密和非对称加密更简单直接,适用于不需要正确解密的场景,比如用户密码的存储。但是由于哈希算法本身的特性,相同的明文加密出来的结果也是一样的,因此需要在加密前加入一些随机因素,使得相同的明文加密出来的结果也不同。
步骤3:使用加密解密函数
实现完加密解密函数之后,可以在代码中使用这些函数。以下是一个示例代码:
$data = "hello world"; // 要加密的明文
$key = "123456"; // 密钥
// 对称加密示例
$encrypted_data = encrypt($data, $key);
echo "对称加密后的密文: " . $encrypted_data . "\n";
$decrypted_data = decrypt($encrypted_data, $key);
echo "对称解密后的明文: " . $decrypted_data . "\n";
// 非对称加密示例
$keys = generate_keys(); // 生成公钥和私钥
$public_key = $keys['public'];
$private_key = $keys['private'];
$encrypted_data = encrypt($data, $public_key);
echo "非对称加密后的密文: " . $encrypted_data . "\n";
$decrypted_data = decrypt($encrypted_data, $private_key);
echo "非对称解密后的明文: " . $decrypted_data . "\n";
// 哈希加密示例
$hashed_data = md5_encrypt($data);
echo "MD5加密后的密文: " . $hashed_data . "\n";
$hashed_data = sha1_encrypt($data);
echo "SHA1加密后的密文: " . $hashed_data . "\n";
以上代码演示了如何使用对称加密、非对称加密和哈希加密三种方式对数据进行加密解密操作。可以根据实际业务需求选择不同的加密解密方式,并注意密钥的保护和管理。
本文标题为:php实现的三个常用加密解密功能函数示例
基础教程推荐
- asp函数split()对应php函数explode() 2022-12-29
- PHP7 preg_replace 出错及解决办法 2022-09-12
- PHP实现求两个字符串最长公共子串的方法示例 2022-10-01
- PHP 实现文件压缩解压操作的方法 2023-01-20
- php删除数组指定元素实现代码 2024-01-15
- 如何用RabbitMQ和Swoole实现一个异步任务系统 2022-09-01
- Laravel等框架模型关联的可用性浅析 2023-03-18
- php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比 2024-01-15
- Laravel路由研究之domain解决多域名问题的方法示例 2023-01-04
- 源码分析 Laravel 重复执行同一个队列任务的原因 2022-10-03