我可以轻松地手工制作我自己的加密算法,如下所示:
// make sure the private key is long enough
byte key[] = {0x3e, 0x33, 0x7e, 0x02, 0x48, 0x2a, 0x4e, ...};
byte data[] = "a string to be encrypted".getBytes("utf-8");
for (int i = 0, j = 0; i < data.length; ++i, ++j) {
data[i] ^= key[j];
if (j + 1 == key.length)
j = 0;
}
使用上述算法,如果我不放弃私钥,我发现没有简单的方法可以破解加密(或者我太天真了?),如果可以像这样轻松创建加密算法,创建标准的重点是什么?什么是使用这些众所周知的算法的好处?
答案 0 :(得分:3)
直接对您提出的算法说,它有几个主要问题:
如果您的数据比您的密钥长,那么恢复密钥将变得非常容易,因为它变得像一个Vigenere密码。
您只能使用密钥加密单个邮件。使用相同的密钥加密两个或多个消息会导致在消息中重用密钥的问题相同,但更糟糕的是。
因为您的密钥必须与实际安全的消息一样长,否则您将面临密钥管理的噩梦。如何存储与消息一样长的密钥?你如何安全地与想要阅读的人沟通?如果要加密1GB文件怎么办?您现在需要2GB的加密版存储空间
您的密钥必须完全随机。随机数生成器中的任何缺陷都会显示有关您的消息和密钥的信息。不可否认,这也是像AES这样的算法的问题,但是虽然糟糕的RNG会减少打破AES消息/密钥的工作量,但它并不像你的方案那么糟糕
众所周知的算法(如AES)解决了这些问题,使用短键来获得更高的安全性。单个256位密钥可用于在大量消息变得不安全之前加密,管理和存储256位密钥比1GB密钥容易得多。
答案 1 :(得分:3)
您使用众所周知的算法来not become Dave。
Schneier's Law指出“任何人都可以发明一个如此聪明的安全系统,以至于她或他无法想到如何打破它。”
这基本上意味着:安全系统(加密算法,身份验证系统......)不能被认为是安全的,因为创建者表示它是安全的。关于该主题的其他专家必须对其进行审核(并且通常会在很长时间内对其进行审核)才能将其视为安全。
答案 2 :(得分:1)
使用众所周知的算法的主要好处是将对其进行检查并分析其缺陷和缺陷。如果您自己动手,则无法获得社区审核的好处。而且,根据您的平台,使用内置加密可能几乎一样容易,也可能一样容易。
我不是密码分析专家,但这个简单的东西可能不那么安全。
此外,如果这很容易,不是每个人都这样做吗?