0

0

C#怎么实现文件的简单加密解密_C#如何通过异或算法处理【代码】

尼克

尼克

发布时间:2026-03-13 15:27:57

|

307人浏览过

|

来源于php中文网

原创

异或加密适合简单场景因其可逆、零依赖、无性能开销,但缺乏混淆与扩散,非真正加密;密钥须为固定长度byte[],避免UTF-8编码问题,加解密函数相同且逐字节异或。

异或加密为什么适合简单场景

因为异或(^)是可逆的位运算,a ^ b ^ b == a,不需要密钥管理、不依赖外部库、无性能开销。但这也意味着它**不是真正意义上的加密**——没混淆、没扩散、密钥一泄露就全破。只适用于临时保护配置文件、避免明文被一眼看穿这类需求。

常见错误现象:System.Text.Encoding.UTF8.GetBytes("密钥") 直接当字节密钥用 → 中文字符会变成多字节,导致解密错位;用 string 拼接密钥和内容再转字节 → 编码不一致,加解密字节长度对不上。

实操建议:

  • 密钥必须是固定长度的 byte[],推荐用 16 或 32 字节的随机值,别用字符串硬编码
  • 如果非要用字符串当密钥,统一用 Encoding.ASCII.GetBytes(),避免 UTF-8 的变长问题
  • 异或操作必须按字节逐位进行,不能对整个字符串做 ^(C# 不支持 string 间异或)

C# 中用 XorEncrypt 函数实现加解密

没有内置的 XorEncrypt,得自己写。核心就是遍历输入字节数组,每个字节跟密钥对应位置字节异或(密钥循环使用)。注意:加密和解密函数完全一样,传入原文或密文都行。

示例代码(精简版):

public static byte[] XorEncrypt(byte[] data, byte[] key)
{
    var result = new byte[data.Length];
    for (int i = 0; i < data.Length; i++)
    {
        result[i] = (byte)(data[i] ^ key[i % key.Length]);
    }
    return result;
}

使用场景:读取 ini 配置文件前解密、保存用户本地 token 前加密。

容易踩的坑:

  • key.Length == 0 会导致 i % 0DivideByZeroException
  • result[i] = data[i] ^ key[i] 写成 key[i] 而不是 key[i % key.Length] → 密钥短于数据时直接越界
  • 忘记将结果转回 string:解密后需用 Encoding.UTF8.GetString(decryptedBytes),且原始文本必须是 UTF-8 编码

文件级异或加解密怎么避免损坏

直接对整个文件流做异或最安全,不涉及编码转换。关键点是:别用 File.ReadAllText / WriteAllText,它们隐式处理编码,会破坏二进制一致性。

零沫AI工具导航
零沫AI工具导航

零沫AI工具导航-AI导航新标杆,探索全球实用AI工具

下载

实操建议:

  • File.ReadAllBytes()File.WriteAllBytes() 处理任意文件(图片、exe、txt 都行)
  • 密钥不要写死在代码里,至少从配置文件或环境变量读,哪怕只是 base64 字符串
  • 加解密前后校验文件长度:异或不改变长度,若 enc.Length != dec.Length,说明某处用了字符串读写

一个典型错误:File.WriteAllText(path, Encoding.UTF8.GetString(XorEncrypt(...))) → 解密时再 GetBytes 就可能因 BOM 或替换字符出错。

为什么不能用异或加密敏感数据

它抗不了最基础的已知明文攻击:比如你加密的是 JSON,攻击者知道开头是 { "token":,就能反推出密钥前几个字节;所有重复明文字节对应密文也重复,频次分析一下就露馅。

性能/兼容性影响几乎为零,但这恰恰是危险信号——真正的加密(如 Aes.Create())必须有初始化向量(IV)、填充模式、密钥派生(Rfc2898DeriveBytes),这些它全没有。

如果你的“简单”是指“不想引 NuGet 包”,那至少换 Convert.ToBase64String + 自定义偏移(比如每个字节 +7 再异或)——虽然也不安全,但比裸异或多一层心理安慰。真要存密码、API Key,别省这三分钟去配 AesGcm

最容易被忽略的一点:异或结果可能是不可见控制字符甚至 \0,用文本编辑器打开加密后文件看到乱码不等于成功,得用十六进制查看器确认字节是否均匀分布——如果不均匀,说明密钥太短或用了弱源。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

457

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

549

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

337

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

82

2025.09.10

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1031

2023.08.02

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

6629

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

843

2023.09.14

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

1092

2023.12.21

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 11.2万人学习

C 教程
C 教程

共75课时 | 5.4万人学习

C++教程
C++教程

共115课时 | 21.7万人学习

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

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