C# 大型unicode文本文件的快速加密

C# 大型unicode文本文件的快速加密,c#,.net,windows,encryption,C#,.net,Windows,Encryption,我有一个很大的unicode文本文件(35MB),其中包含由标点符号分隔的单词。我需要以某种方式隐藏文件的内容(至少对大多数不擅长破解的人是这样) 迄今为止最好的方法似乎是加密。我对加密几乎一无所知。我尝试使用类似问题的解决方案“C#的简单双向加密”,但执行加密需要很长时间 什么是开箱即用的最快方法(算法)(即它包含在.Net库中)?关于如何使用它的一个简短示例会很好:) 我不在乎加密有多强,如果你用文本编辑器打开加密文件,却看不到文字,那就完美了。重要的一点是速度。AES仍然非常快,下面是一些

我有一个很大的unicode文本文件(35MB),其中包含由标点符号分隔的单词。我需要以某种方式隐藏文件的内容(至少对大多数不擅长破解的人是这样)

迄今为止最好的方法似乎是加密。我对加密几乎一无所知。我尝试使用类似问题的解决方案“C#的简单双向加密”,但执行加密需要很长时间

什么是开箱即用的最快方法(算法)(即它包含在.Net库中)?关于如何使用它的一个简短示例会很好:)
我不在乎加密有多强,如果你用文本编辑器打开加密文件,却看不到文字,那就完美了。重要的一点是速度。

AES仍然非常快,下面是一些实现它的帮助:


行业标准加密以外的任何东西迟早都会出现问题。

到目前为止,您尝试了什么?像AES和blowfish这样的标准加密是否太慢

你总是可以做一些简单的事情,比如根据一些与文件长度相同的密码对内容进行异或运算。

正如tilleryj所说

根据与文件相同的长度重复的一些传递代码对内容进行异或运算既简单又快速

但它比其他的镶嵌类型更安全。 我编写了一个简单的类,它可以帮助您使用另一个字符串作为密码,使用xor方法编写一个字符串。希望其他人能使用它

`使用制度; 使用系统文本

命名空间MyEncriptionNameSpace { 类XORSTRINGCRIPTER { 私有字符串\uuuu密码; 公共XorStringScripter(字符串密码) { if(password.Length==0) { 抛出新异常(“无效密码”); } __密码=密码; } 公共字符串EnScript(字符串StringToEnScript) { 返回_enccript(stringToEncript); }

公共字符串描述(字符串加密字符串)
{
返回_enccript(encripTedString);
}
公共字符串_enccript(字符串stringToEncript)
{
var encriptedStringBuilder=新的StringBuilder(stringToEncript.Length);
int positionInPassword=0;
for(int i=0;i
}`

实际上encript和decript做的是相同的事情,我提供了bouth以避免对bouth encription和Decription使用相同的函数造成混淆。这是因为如果你有一个数字a,你把它和B异或得到C,那么如果你把C和B异或得到a。

A xor B=C--->C xor B=A

如果您不需要使用程序访问该文件,为什么不使用密码.zip文件或其他文件呢?我需要在我的应用程序启动时将其解密。我已经尝试了此处描述的AES加密,但速度非常慢。在3GB RAMIf的core 2 duo(2.5 GHz)上,它并没有在超过15分钟内完成。如果您只想“隐藏”原始数据,可以使用简单的XOR模糊处理。无法抵御任何严重的密码攻击,但会隐藏一些东西。安全性的最大问题不是它有多安全,而是谁会受到指责,并在它被破坏时承担损害责任。你不想接近那一连串的指责。不要实现自己的加密方案,尤其是tileryj建议的弱加密方案。将文件放在带有锁的服务器室中的具有强密码的安全文件服务器上。我尝试过此处描述的AES加密,但速度非常慢。它并没有在超过15分钟内完成一个核心2二重唱(2.5 GHz)与3GB的拉米猜测我会尝试异或的方法,然后。我描述它的方式有意义吗?是的,xor为我做了。它在1-2秒内覆盖32MB。谢谢 `using System; using System.Text;

namespace MyEncriptionNameSpace { class XorStringEncripter { private string __passWord; public XorStringEncripter(string password) { if (password.Length == 0) { throw new Exception("invalide password"); } __passWord = password; } public string encript(string stringToEncript) { return __encript(stringToEncript); }

    public string decript(string encripTedString)
    {
        return __encript(encripTedString);
    }

    public string __encript(string stringToEncript)
    {
        var encriptedStringBuilder = new StringBuilder(stringToEncript.Length);
        int positionInPassword = 0;

        for (int i = 0; i < stringToEncript.Length; i++)
        {
            __corectPositionInPassWord(ref positionInPassword);
            encriptedStringBuilder.Append((char)((int)stringToEncript[i] ^ (int)__passWord[positionInPassword]));
            ++positionInPassword;
        }
        return encriptedStringBuilder.ToString();
    }

    private void __corectPositionInPassWord(ref int positionInPassword)
    {
        if (positionInPassword == __passWord.Length)
        {
            positionInPassword = 0;
        }
    }
}