📜  加密解密数据php(1)

📅  最后修改于: 2023-12-03 14:50:24.129000             🧑  作者: Mango

加密解密数据 PHP

在实际开发中,经常需要对用户的敏感信息进行加密存储(如密码),或者对数据进行加密传输(如支付信息)。本文将介绍 PHP 中常见的几种加密解密方式。

1. 单向加密(MD5)

单向加密(也称为哈希算法)使用一个函数将数据转换成一段固定长度的无法还原的字符串,主要用于验证数据的完整性,如用户密码。其中,MD5 是最为常见的一种单向加密方式。

代码示例
// 加密
$password = 'password';
$encrypted_password = md5($password);
echo $encrypted_password;

// 输出:5f4dcc3b5aa765d61d8327deb882cf99
注意事项
  • 单向加密是无法反解的,因此密码找回功能需要通过其他途径实现。
2. 对称加密(AES)

对称加密使用同一个密钥进行加密和解密,常用于对数据进行保密性加密,如支付信息。其中,AES 是最为常用的一种对称加密方式。

代码示例
// 加密
$data = 'data to be encrypted';
$key = 'encryption key';
$encrypted_data = openssl_encrypt($data, 'AES-256-ECB', $key);
echo $encrypted_data;

// 输出:K4Y4L7cOa1ykIR0KAgBU0Q==
// 解密
$decrypted_data = openssl_decrypt($encrypted_data, 'AES-256-ECB', $key);
echo $decrypted_data;

// 输出:data to be encrypted
注意事项
  • 密钥的安全性非常重要,一旦泄露,就会破坏加密的保密性。
  • 对称加密需要传输密钥,因此传输密钥的过程也需要进行安全加固。
3. 非对称加密(RSA)

非对称加密使用一对公钥和私钥进行加密和解密,公钥可以公开,私钥必须保密,常用于数字签名、加密通信等场景。其中,RSA 是最为常用的一种非对称加密方式。

代码示例
// 生成密钥对
$config = array(
    'digest_alg' => 'sha512',
    'private_key_bits' => 2048,
    'private_key_type' => OPENSSL_KEYTYPE_RSA,
);
$resource = openssl_pkey_new($config);
openssl_pkey_export($resource, $private_key);
$public_key = openssl_pkey_get_details($resource)['key'];

// 加密
$data = 'data to be encrypted';
openssl_public_encrypt($data, $encrypted_data, $public_key);
echo base64_encode($encrypted_data);

// 输出:MTg5MmNmYjA2YzYzYTljZmUxNzUxOTI5MjZlMjhmZDA5MTk1NTdkZjU3ZWQ5Mzc1NTAyNTlkMzgzMjIwZjFmMw==
// 解密
openssl_private_decrypt(base64_decode($encrypted_data), $decrypted_data, $private_key);
echo $decrypted_data;

// 输出:data to be encrypted
注意事项
  • 私钥必须保密,泄露私钥将会导致所有数据被破解。
  • 非对称加密的过程时间较长,因此只适用于对少量数据进行加密。
  • 在加密通信时,需要让客户端将数据使用服务端的公钥进行加密,服务端再使用自己的私钥解密。同时需要防止中间人攻击,可以使用 SSL/TLS 协议实现安全传输。