Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 两种加密算法-哪一种更好?_C#_.net_Cryptography - Fatal编程技术网

C# 两种加密算法-哪一种更好?

C# 两种加密算法-哪一种更好?,c#,.net,cryptography,C#,.net,Cryptography,我已经做了两个加密算法,其中一个侧重于速度,另一个是更强的加密 第一个加密是: public static byte[] Encrypt(byte[] bytes, string key) { byte[] Key = Encoding.ASCII.GetBytes(key); int index = 0; for (int i = 0; i < bytes.Length; i++) { if (index >= key.Length

我已经做了两个加密算法,其中一个侧重于速度,另一个是更强的加密

第一个加密是:

public static byte[] Encrypt(byte[] bytes, string key)
{
    byte[] Key = Encoding.ASCII.GetBytes(key);

    int index = 0;
    for (int i = 0; i < bytes.Length; i++)
    {
        if (index >= key.Length) index = 0;
        bytes[i] += Key[index];
        index++;
    }

    return bytes;
}
公共静态字节[]加密(字节[]字节,字符串密钥)
{
byte[]Key=Encoding.ASCII.GetBytes(Key);
int指数=0;
for(int i=0;i=key.Length)索引=0;
字节[i]+=键[index];
索引++;
}
返回字节;
}
虽然这种加密工作很快,但并不安全

例如,如果有人使用与加密密钥相似90%的密钥解密您的数据,则输出数据也将与原始数据相似90%

这很糟糕。例如,如果您正在加密文本,而某人获得的解密密钥与您用于加密的密钥90%相似,则他可能能够理解您的大部分文本

我还制作了另一种加密算法,这是:

public static byte[] Encrypt(byte[] bytes, string key)
{
    byte[] Key = Encoding.ASCII.GetBytes(key);

    byte sum = 0;
    for (int i = 0; i < Key.Length; i++)
    {
        sum += Key[i];
    }

    int index = 0;
    for (int i = 0; i < bytes.Length; i++)
    {
        if (index >= key.Length) index = 0;
        bytes[i] += (byte)(Key[index] + sum);
        index++;
    }

    return bytes;
}
公共静态字节[]加密(字节[]字节,字符串密钥)
{
byte[]Key=Encoding.ASCII.GetBytes(Key);
字节和=0;
for(int i=0;i=key.Length)索引=0;
字节[i]+=(字节)(键[index]+和);
索引++;
}
返回字节;
}
该算法比第一个算法更强。在该算法中,即使某人的解密密钥与您的加密密钥99%相似,输出数据仍将完全不同

这里的每一个小差异都会引发巨大的差异。 但缺点是,它牺牲了一些速度。它比第一种算法慢,尤其是在加密大文件时


那么,您认为什么更适合加密数据呢?更快的算法(第一个),还是第二个?我说的是大量的数据,所以速度是这里的一个重要因素。

< P>我认为两者都不强,两者都很容易受到A。因此,如果我知道一个加密的文件有一个已知的头,我可以通过大约20分钟的编程来反向生成密钥,以编写破解密钥的程序,而一旦写入,程序可能只需要几秒钟就可以运行


即使我没有可以比较的明文,但我知道加密的blob是一种已知语言的文本,这两种语言也很容易受到基于它的攻击。

这两种语言都不是我所说的“加密”;小心。。。使用自己的加密算法是一个巨大的错误。要充分理解正确的加密需要大量的经验和数学知识,才能知道你是否真的在做一些非常愚蠢的事情。一方面,我想知道这个问题是否更适合,但是:问题是——他们可能会因为你做了那件事而活活吃掉你,并称之为加密(不,说真的,他们不会留下深刻印象)但这仍然是一种加密——使用密钥更改指定的数据,并且需要完全相同的密钥来解密加密的数据。如果没有确切的密钥,就永远无法得到原始数据。因此,即使您不认为这是加密,哪种算法更好?是的,因为您已经描述了一个替代品。在密码方面,很长一段时间以来一直被认为是易受攻击的东西。如果您想使用现代密码,请在CBC或CTR模式下使用AES(仅用于机密性,而不是完整性或真实性,请使用GCM模式)@Travier嗯,我想找的第一件事是人们发送具有可预测的二进制头的文件;pdf、zip、word,还有很多xml文件;正是从这一点上,可能就可以在第一个算法的密钥反转方面取得巨大的领先。至于第二件事:有关于这个主题的完整论文。我不是加密专家Graphics专家。我能说的就是:我一刻也不相信这一点。像RC4和AES这样的加密算法不容易受到这样的攻击吗?@Travier RC4对某些类型的攻击有轻微的脆弱性;尽管经过几十年的研究,AES不容易受到任何攻击。但是如果AES是像RC4这样的对称密钥加密,那么W是否不那么脆弱?寻找带有AES的已知文件头是行不通的吗?@ Tracvier-Hew,我认为它本身并不适合考虑密码原语。密钥流重用与RC­4(或CTR模式中的AES)的流密码一起使用。是灾难性的,因此密钥与随机初始化向量相结合。ECB模式下的AES不需要IV,而且可以肯定的是,它会泄漏有关明文的信息。