我制作了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%相似,输出数据仍将完全不同。
此处钥匙的每个小差异都会引发巨大的差异。 但缺点是,它牺牲了一些速度。它比第一个算法慢,特别是在加密大文件时。
那么您认为加密数据会更好吗?更快的算法(第一个),还是第二个?我在谈论大量数据,因此速度是这里的一个重要因素。
答案 0 :(得分:1)
我认为两者都不强,两者都容易受到Known Plaintext Attack的攻击,所以如果我知道加密的文件有一个已知的标题,我可以反转生成密钥,可能需要大约20分钟的编程来编写破解密钥的程序,一旦编写,程序可能只需几秒钟就可以运行。
即使我没有要比较的明文,但我知道加密的blob是已知语言的文本,这两者也很容易受到基于Frequency Analysis的攻击。</ p>