php字符串常用算法--字符串加密解密
封面图
•
2025-12-10
•
PHP
213
0
0
0
在 PHP 中,字符串的加密和解密是常见的操作,用于保护敏感数据(如密码、用户信息等)。下面是一些常用的字符串加密和解密算法及实现方式。 --- ## 一、PHP 字符串加密解密常用方法 ### 1. **Base64 编码/解码** - 不是真正的加密,但常用于编码数据以便传输。 - 适用于非敏感数据的编码。 #### 编码 ```php $original = "Hello, World!"; $encoded = base64_encode($original); echo $encoded; // 输出: SGVsbG8sIFdvcmxkfQ== ``` #### 解码 ```php $decoded = base64_decode($encoded); echo $decoded; // 输出: Hello, World! ``` --- ### 2. **MD5 哈希(不可逆)** - 用于密码存储(不推荐直接使用,需加盐) - 不可解密,只能比对哈希值 ```php $password = "password123"; $hash = md5($password); echo $hash; // 输出: 482c818d9e2f8a5b9c0d1e6f7a8b9c0d ``` --- ### 3. **SHA 系列哈希(如 SHA1、SHA256)** - 更安全的哈希算法,但依然不可逆 ```php $hash = hash('sha256', $password); echo $hash; ``` --- ### 4. **AES 加密(对称加密)** - 使用 `openssl` 扩展进行 AES 加密和解密 - 对称加密:加密和解密使用同一密钥 #### 加密示例: ```php $key = 'your-secret-key-123'; // 必须为 16, 24 或 32 字节 $iv = openssl_random_pseudo_bytes(16); // 初始化向量 $data = "Secret Message"; // 加密 $encrypted = openssl_encrypt($data, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv); $encrypted = base64_encode($iv . $encrypted); // 存储时需要同时保存 IV 和密文 echo $encrypted; ``` #### 解密示例: ```php $encrypted = '...'; // 从数据库中获取的加密字符串 $decoded = base64_decode($encrypted); $iv = substr($decoded, 0, 16); $encryptedData = substr($decoded, 16); $decrypted = openssl_decrypt($encryptedData, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv); echo $decrypted; ``` --- ### 5. **使用 `mcrypt`(已过时,建议用 `openssl`)** 虽然 `mcrypt` 已被弃用,但如果你还在维护旧代码,可以参考如下: ```php $plaintext = "Secret Message"; $key = "your-secret-key"; $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, ''); mcrypt_generic_init($td, $key, ''); $encrypted = mcrypt_generic($td, $plaintext); mcrypt_generic_deinit($td); ``` --- ## 二、推荐实践 | 类型 | 是否可逆 | 是否推荐 | 示例 | |------|----------|----------|------| | Base64 | 否 | ✅ | 数据编码,非加密 | | MD5 | 否 | ❌ | 不推荐用于密码存储 | | SHA256 | 否 | ✅ | 密码哈希(配合盐值) | | AES | 是 | ✅ | 对称加密,适合敏感数据 | --- ## 三、密码存储的最佳实践 ```php $password = "user_password"; $hashed = password_hash($password, PASSWORD_DEFAULT); // 存入数据库 // 验证 if (password_verify($password, $hashed)) { echo "Password is valid!"; } else { echo "Invalid password."; } ``` --- ## 四、总结 - **Base64**:编码,非加密 - **MD5 / SHA**:哈希,不可逆,适合密码存储(需加盐) - **AES**:对称加密,适合敏感数据加密与解密 - **PHP 内置函数**:`password_hash()` 和 `password_verify()` 是推荐的密码处理方式 --- 如果你有具体的加密需求(比如只加密某个字段、使用特定算法等),欢迎继续提问!
上一篇:
php自定义加密函数、解密
下一篇:
php foreach 用法
标题录入,一次不能超过6条
留言
评论