Encryption 什么';使用著名的加密算法有什么好处?

Encryption 什么';使用著名的加密算法有什么好处?,encryption,des,Encryption,Des,我可以很容易地手工制作自己的加密算法,如下所示: // 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) {

我可以很容易地手工制作自己的加密算法,如下所示:

// 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;
}
//确保私钥足够长
字节键[]={0x3e,0x33,0x7e,0x02,0x48,0x2a,0x4e,…};
字节数据[]=“要加密的字符串”。getBytes(“utf-8”);
对于(int i=0,j=0;i

使用上面的算法,如果我不泄露私钥,我就找不到破解加密的简单方法(或者我太天真了?),如果可以像这样轻松创建加密算法,那么创建标准有什么意义?使用这些知名算法的好处是什么?

使用知名算法的主要好处是,将对其缺陷和弱点进行审查和分析。如果你自己动手,你就得不到社区评论的好处。此外,根据您的平台,使用内置加密几乎同样容易,或者说同样容易

我不是密码分析专家,但这么简单的东西可能不那么安全


此外,如果这很容易,不是每个人都会这么做吗

直接说一下您提出的算法,它有两个主要问题:

  • 如果您的数据比密钥长,那么恢复密钥将变得非常容易,因为它就像一个维格纳密码

  • 您只能使用密钥加密单个消息。使用相同密钥加密两个或多个消息会导致与在消息中重用密钥相同的问题,但更糟

  • 因为您的密钥必须与消息一样长才能真正安全,所以您有一个密钥管理噩梦。如何存储与邮件一样长的密钥?你如何将它安全地传达给任何想阅读它的人?如果要加密1GB文件,该怎么办?您现在需要2GB的存储空间来存储加密版本

  • 你的钥匙必须是完全随机的。随机数生成器中的任何缺陷都会暴露有关消息和密钥的信息。诚然,对于AES这样的算法来说,这也是一个问题,但尽管坏的RNG会减少破解AES消息/密钥的工作量,但它并不像您的方案那样糟糕


  • 像AES这样的著名算法解决了这类问题,使用短密钥来获得更高的安全性。一个256位密钥可用于在不安全使用之前对大量消息进行加密,并且管理和存储256位密钥比1GB密钥容易得多。

    您可以使用一种众所周知的算法来进行加密

    声明说:“任何人都可以发明一种安全系统,这种系统非常聪明,以至于她或他想不出如何打破它。”


    这基本上意味着:安全系统(加密算法、身份验证系统等)不能被认为是安全的,因为创建者说它是安全的。该主题的其他专家必须对其进行审查(通常审查很长时间),才能认为它是安全的。

    如果你否决了我的问题,请在这里留下你的理由!这里有一些很好的理由:谢谢你,这就是我想要的答案!它清楚地指出了我的算法的缺陷,这有助于我理解为什么它是不安全的,为什么我应该使用一个著名的算法而不是手工制作的算法。再次感谢你,彼得,这真的很有帮助!第一个链接很有趣,我不会成为戴夫!