2014-03-31 46 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