C#实现简单的异或加密,方便处理

将本地的mp4和ts文件加密为“dj”文件,无法播放。解密则是将“dj”文件解密为mp4或ts文件。

复制代码
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("请输入操作方式(1加密、0解密):");
            var key = Console.ReadLine();
            if (key == "1")
            {
                Encrypt();
            }
            else
            {
                Dencrypt();
            }
            Console.ReadKey();
        }

        /// <summary>
        /// 加密处理
        /// </summary>
        static void Encrypt()
        {
            string path = AppDomain.CurrentDomain.BaseDirectory;
            string[] extends = new string[] { "*.ts", "*.mp4" };
            foreach (var ex in extends)
            {
                foreach (var file in Directory.GetFiles(path, ex))
                {
                    Encrypt(file, file + ".dj");
                    Console.WriteLine($"[{file}]加密成功");
                    File.Delete(file);
                }
            }
            Console.WriteLine("所有文件加密成功");
        }

        static void Dencrypt()
        {
            string path = AppDomain.CurrentDomain.BaseDirectory;
            foreach (var file in Directory.GetFiles(path, "*.dj"))
            {
                Encrypt(file, file.Replace(".dj", ""));
                Console.WriteLine($"[{file}]解密成功");
                File.Delete(file);
            }
            Console.WriteLine("所有文件解密成功");
        }

        static void Encrypt(string sourceFileName, string targetFileName)
        {
            using (var writeStream = File.OpenWrite(targetFileName))
            {
                //int start = 0;
                int len = 0;
                byte[] readBytes = new byte[1024];
                using (var readStream = File.OpenRead(sourceFileName))
                {
                    var totalLenth = readStream.Length;
                    while ((len = readStream.Read(readBytes, 0, readBytes.Length)) > 0)
                    {
                        writeStream.Write(Encry(readBytes), 0, len);
                        Console.WriteLine($"[{sourceFileName}]读取中[{readStream.Position}/{totalLenth}]");
                    }
                }
            }
        }

        static byte[] Encry(byte[] bs)
        {
            for (int i = 0; i < bs.Length; i++)
            {
                bs[i] = (byte)(bs[i] ^ 0x12);
            }
            return bs;
        }
    }
}
复制代码

 

posted @   段江涛IT  阅读(255)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
历史上的今天:
2020-12-18 修改Nuget包默认存放路径,避免增加C盘的负担
页脚HTML代码
点击右上角即可分享
微信分享提示