两种加密算法 - 哪种更好?

时间:2014-03-31 18:20:32

标签: c# .net cryptography

我制作了2种加密算法,其中一种专注于速度,另一种是更强的加密。

第一个加密是:

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;
}

虽然这种加密工作很快,但并不安全。

例如,如果某人使用与加密密钥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;
}

此算法比第一个算法强。在此算法中,即使某人的解密密钥与您的加密密钥的99%相似,输出数据仍将完全不同。

此处钥匙的每个小差异都会引发巨大的差异。 但缺点是,它牺牲了一些速度。它比第一个算法慢,特别是在加密大文件时。

那么您认为加密数据会更好吗?更快的算法(第一个),还是第二个?我在谈论大量数据,因此速度是这里的一个重要因素。

1 个答案:

答案 0 :(得分:1)

我认为两者都不强,两者都容易受到Known Plaintext Attack的攻击,所以如果我知道加密的文件有一个已知的标题,我可以反转生成密钥,可能需要大约20分钟的编程来编写破解密钥的程序,一旦编写,程序可能只需几秒钟就可以运行。

即使我没有要比较的明文,但我知道加密的blob是已知语言的文本,这两者也很容易受到基于Frequency Analysis的攻击。<​​/ p>