我做了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%的相似性,但输出数据仍然完全不同。
这里关键的每一个小小的差异都会引发巨大的差异。 但缺点是,它牺牲了一些速度。它比第一种算法慢,特别是在加密大文件时。
那么你认为什么是更好的加密数据?更快的算法(第一个)还是第二个?我在谈论大量的数据,因此速度是一个重要的因素。
这些都不是我所说的“加密”;保持谨慎......滚动你自己的加密算法是一个巨大的错误。需要很多的经验和大量的数学来充分理解适当的加密技术,才能知道你是否在做一些非常愚蠢的事情。 –
一方面,我怀疑这个问题是否会更适合[security.stackexchange.com](http://security.stackexchange.com/),但问题是 - 他们可能会*活着吃你*为了做^^^^并将其称为加密(不,认真地说,它们不会留下深刻的印象) –
但是这仍然是一种加密 - 您使用密钥更改指定的数据,并且您需要完全相同的密钥来解密加密的数据。如果您没有确切的密钥,您将永远无法获取原始数据。 那么,即使你不认为这是一种加密,哪种算法更好? – Travier