0

0

php创建文件内容加密存储怎做_php加密创文件法【技巧】

看不見的法師

看不見的法師

发布时间:2026-02-06 10:14:02

|

103人浏览过

|

来源于php中文网

原创

PHP加密文件必须用可逆加密如openssl_encrypt(),禁用md5/sha1等哈希;选AES-256-CBC需配随机IV并前置存储,密钥须用hash_pbkdf2派生;读写须二进制模式,避免IV错位或密钥长度错误。

php创建文件内容加密存储怎做_php加密创文件法【技巧】

PHP 创建加密文件前先选对算法

直接用 md5()sha1() 存文件内容?不行,这些是哈希,不可逆,没法还原原始数据。真正要“加密存储”,得用可逆加密,比如 openssl_encrypt() —— PHP 7.1+ 默认启用,支持 AES-256-CBC、AES-128-GCM 等主流方案。

别碰 mcrypt_*(已废弃),也别手写 XOR 加密——没认证、易被篡改、无 IV 管理,实际等于没加。

  • AES-256-CBC 最常用,但必须配随机 $iv,且需和密文一起保存(通常前置 16 字节
  • 如果需要完整性校验,优先选 AES-128-GCM,它自带认证标签,不用额外 HMAC
  • 密钥别硬编码,更别用短口令直当 key;用 hash_pbkdf2('sha256', $password, $salt, 65536, 32, true) 衍生 32 字节密钥

写加密文件的最小可靠流程

核心就三步:生成安全 IV → 加密内容 → 拼接并写入文件。跳过任意一步都可能解不开或被绕过。

$content = '用户敏感数据:身份证号+银行卡号';
$key = hash_pbkdf2('sha256', 'MyPass123!', 'salt_abc', 65536, 32, true);
$ivlen = openssl_cipher_iv_length($cipher = 'AES-256-CBC');
$iv = openssl_random_pseudo_bytes($ivlen); // 必须每次不同
$encrypted = openssl_encrypt($content, $cipher, $key, OPENSSL_RAW_DATA, $iv);
file_put_contents('/path/to/secure.dat', $iv . $encrypted); // IV 在前,不解密无法读
  • 必须用 OPENSSL_RAW_DATA,否则默认 Base64 编码会增大体积且增加解码负担
  • $iv 长度由算法决定(如 CBC 是 16 字节),不能固定写死 16
  • 文件后缀用 .dat 或无扩展名,别用 .txt.log,避免被误扫或明文编辑

读取时解密失败的常见原因

90% 的“解密为空”或“false”返回,不是密钥错,而是 IV 或格式没对齐。

C知道
C知道

CSDN推出的一款AI技术问答工具

下载

立即学习PHP免费学习笔记(深入)”;

  • 读文件时忘了截出前 N 字节当 IV:$data = file_get_contents($file); $iv = substr($data, 0, $ivlen); $ciphertext = substr($data, $ivlen);
  • 密钥长度不对:AES-256 要 32 字节二进制 key,md5('xxx') 是 32 字符 hex,需用 hex2bin()
  • PHP 版本差异:7.4+ 对空 IV 或弱密码会抛 OpenSSLException,别用 @ 抑制,要捕获异常看具体提示
  • 文件被文本编辑器意外换行或 BOM 头污染 —— 加密后内容是二进制,必须用二进制模式读写(file_get_contents 默认就是,但若用 fopen 就得加 b 标志)

不推荐但有人试的“快捷方式”风险点

比如用 base64_encode(file_get_contents()) + 自定义替换表,或简单异或一个固定字节 —— 这些不是加密,是混淆,工具几秒就能还原。

  • 哪怕加了时间戳或简单 checksum,也不防重放或篡改
  • gzcompress() 包一层再加密?可以,但压缩本身不提升安全性,反而可能泄露内容长度特征
  • 把密钥存在同目录下 .key 文件?等于把钥匙挂门把手上,权限设为 600 也挡不住 Web 路径泄露或本地提权

真要简化流程,不如封装成两个函数:encrypt_file($path, $content, $password)decrypt_file($path, $password),把 IV 处理、密钥派生、错误检查全包进去——重复逻辑藏好,比抄片段更安全。

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

428

2023.08.14

java连接字符串方法汇总
java连接字符串方法汇总

本专题整合了java连接字符串教程合集,阅读专题下面的文章了解更多详细操作。

22

2026.02.05

java中fail含义
java中fail含义

本专题整合了java中fail的含义、作用相关内容,阅读专题下面的文章了解更多详细内容。

26

2026.02.05

控制反转和依赖注入区别
控制反转和依赖注入区别

本专题整合了控制反转和依赖注入区别、解释、实现方法相关内容。阅读专题下面的文章了解更多详细教程。

17

2026.02.05

钉钉脑图插图教程合集
钉钉脑图插图教程合集

本专题整合了钉钉脑图怎么插入图片、钉钉脑图怎么用相关教程,阅读专题下面的文章了解更多详细内容。

50

2026.02.05

python截取字符串方法汇总
python截取字符串方法汇总

本专题整合了python截取字符串方法相关合集,阅读专题下面的文章了解更多详细内容。

11

2026.02.05

Java截取字符串方法合集
Java截取字符串方法合集

本专题整合了Java截取字符串方法汇总,阅读专题下面的文章了解更多详细操作教程。

1

2026.02.05

java 抽象方法
java 抽象方法

本专题整合了java抽象方法定义、作用教程等内容,阅读专题下面的文章了解更多详细内容。

3

2026.02.05

Eclipse创建jsp文件教程合集
Eclipse创建jsp文件教程合集

本专题整合了Eclipse创建jsp文件、创建jsp项目等等内容,阅读专题下面的文章了解更多详细教程。

71

2026.02.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 11.1万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.2万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号