2014-03-31 52 views
0

我做了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%的相似性,但输出数据仍然完全不同。

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

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

+2

这些都不是我所说的“加密”;保持谨慎......滚动你自己的加密算法是一个巨大的错误。需要很多的经验和大量的数学来充分理解适当的加密技术,才能知道你是否在做一些非常愚蠢的事情。 –

+1

一方面,我怀疑这个问题是否会更适合[security.stackexchange.com](http://security.stackexchange.com/),但问题是 - 他们可能会*活着吃你*为了做^^^^并将其称为加密(不,认真地说,它们不会留下深刻的印象) –

+0

但是这仍然是一种加密 - 您使用密钥更改指定的数据,并且您需要完全相同的密钥来解密加密的数据。如果您没有确切的密钥,您将永远无法获取原始数据。 那么,即使你不认为这是一种加密,哪种算法更好? – Travier

回答

1

我认为既不会更强,两者都很容易受到Known Plaintext Attack的影响,所以如果我知道一个已加密的文件有一个已知的头文件,我可以反转engeneer的密钥,也许大约需要20分钟的编程来编写破解的程序关键和程序可能只需要几秒钟就可以运行一次。

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

+0

加密算法如RC4和AES不容易受到这种攻击? – Travier

+1

@Travier RC4稍微容易遭受某些类型的攻击;尽管数十年的研究报告显示,AES并不存在任何攻击。 – ntoskrnl

+0

但是如果AES是像RC4那样的对称密钥加密,那么它如何不易受到攻击?使用AES查找已知的文件标题将不起作用? – Travier