当前位置: 首页 > news >正文

PHP 加密解密方法

PHP 加密解密方法

PHP 提供了多种加密和解密方法,以下是常见的几种方式:

使用 OpenSSL 加密解密

OpenSSL 是一个强大的加密库,支持多种加密算法。

// 加密 function encrypt($data, $key) { $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc')); $encrypted = openssl_encrypt($data, 'aes-256-cbc', $key, 0, $iv); return base64_encode($encrypted . '::' . $iv); } // 解密 function decrypt($data, $key) { list($encrypted_data, $iv) = explode('::', base64_decode($data), 2); return openssl_decrypt($encrypted_data, 'aes-256-cbc', $key, 0, $iv); } // 使用示例 $key = 'your-secret-key'; $encrypted = encrypt('Hello World', $key); $decrypted = decrypt($encrypted, $key);
使用 Sodium 加密解密

Sodium 是一个现代加密库,PHP 7.2+ 内置支持。

// 加密 function sodiumEncrypt($data, $key) { $nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES); $ciphertext = sodium_crypto_secretbox($data, $nonce, $key); return base64_encode($nonce . $ciphertext); } // 解密 function sodiumDecrypt($data, $key) { $decoded = base64_decode($data); $nonce = mb_substr($decoded, 0, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, '8bit'); $ciphertext = mb_substr($decoded, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, null, '8bit'); return sodium_crypto_secretbox_open($ciphertext, $nonce, $key); } // 使用示例 $key = random_bytes(SODIUM_CRYPTO_SECRETBOX_KEYBYTES); $encrypted = sodiumEncrypt('Hello World', $key); $decrypted = sodiumDecrypt($encrypted, $key);
使用 Mcrypt 加密解密(已弃用)

Mcrypt 在 PHP 7.1 中被弃用,但在旧版本中仍可使用。

// 加密 function mcryptEncrypt($data, $key) { $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv); return base64_encode($iv . $encrypted); } // 解密 function mcryptDecrypt($data, $key) { $data = base64_decode($data); $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC); $iv = substr($data, 0, $iv_size); $encrypted = substr($data, $iv_size); return mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $encrypted, MCRYPT_MODE_CBC, $iv); }
使用 Hash 进行单向加密

单向加密通常用于密码存储。

// 使用 password_hash $hash = password_hash('password123', PASSWORD_DEFAULT); // 验证密码 if (password_verify('password123', $hash)) { echo 'Password is valid!'; } else { echo 'Invalid password.'; }
注意事项
  • 加密密钥应妥善保管,避免泄露。
  • 对于密码存储,推荐使用password_hashpassword_verify
  • OpenSSL 和 Sodium 是现代 PHP 中推荐的加密方式。
  • Mcrypt 已弃用,不建议在新项目中使用。
http://www.jsqmd.com/news/690328/

相关文章:

  • 从Cmd到PowerShell:一个Windows老鸟的十年命令行工具演进史与效率翻倍心得
  • AI技术如何革新寻宝游戏:动态线索与视觉验证实战
  • K210串口通信避坑实录:Python与STM32数据互传,为什么我的字节数据发不出去?
  • 边缘计算与大语言模型部署:技术解析与实践
  • QUIC协议
  • 遇水易释氢燃爆,镁合金加工润滑痛点一次性讲透
  • Weka机器学习算法调优实战:k近邻距离度量对比
  • Notion客户端白屏别慌!Windows/Mac/Web三端保姆级修复指南(含缓存清理路径)
  • 4大房产中介房源系统盘点
  • C++实现MCP网关亚毫秒接入的最后机会:Linux 6.8新特性适配指南+DPDK 23.11迁移 checklist(限2024Q3前下载)
  • Linux 的 shuf 命令
  • HarmonyOS6 ArkTS 属性字符串(StyledString)使用
  • 提升PCB设计效率:PADS中快速导圆角的两种隐藏技巧与批量处理思路
  • 编译卡住的原因!
  • 从蓝桥杯国赛真题出发,手把手教你用CubeMX配置STM32的定时器输入捕获(测频与占空比)
  • 国内主流接线盒品牌实测排行:设备接线盒,tibox天齐电气接线盒,tibox接线盒,丝印接线盒,排行一览! - 优质品牌商家
  • 基于J2ee的高校毕业生就业信息系统小程序(文档+源码)_kaic
  • RK3588功耗与性能平衡实战:通过sysfs节点精细调控CPU/GPU/NPU/DDR的运行状态
  • 科研图像分析新选择:Fiji图像处理软件完整指南
  • 边缘计算下LLM推理优化:挑战、策略与实践
  • AI智能体落地的关键:不是模型能力,而是RPA执行能力
  • Java项目上线踩坑:域名能Ping通,接口一调就504?手把手教你定位网关背后的‘慢速杀手’
  • 机器学习中的离散概率分布:原理与应用实践
  • 【技术综述】3D高斯溅射:从原理到前沿应用的全景解析
  • 自学渗透测试第23天(漏洞分类与sql注入模仿)
  • Python处理GEDI H5文件实战:从批量提取波形到生成可分析CSV(附完整代码)
  • 基于OpenCV的Java人脸识别系统开发实战
  • TensorFlow实现多标签文本分类:从数据清洗到模型部署
  • 告别龟速下载!手把手教你手动配置VS Code的Rust-Analyzer(附Stable/Nightly双版本路径)
  • 收藏 | AI开发者必看:构建智能对话系统,避免踩坑的技术路径与经验分享