两台计算机通过互联网使用套接字进行通信 我只是将服务器程序发送给另一个人,然后我的客户端程序将发送和接收字符串 我需要在传输过程中对数据进行加密 我的想法是简单地使用一个不需要任何密钥的幼稚算法,而是一对包含所有字母数字字符的序列。
ROW1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
第二行将包含相同的字符,但会混淆。原始内容将在传输之前转换为第二个序列,并在之后翻译回来。
现在我想知道这个系统是否安全。
答案 0 :(得分:4)
答案 1 :(得分:4)
可能来自精神上受到挑战的猴子,但NSA(或者甚至是高中新生的稍微熟练的密码学家)会在很短的时间内解密。
所有你需要解决的问题是对英语字母频率(或任何你想做分析的目标语言)和一些密文的基本知识。事实上,就不适合加密而言,它在ROT13和Pig Latin方面排名靠前。
答案 2 :(得分:2)
这种方法通常是个坏主意。事实上,我认为不足以将它用于任何目的。我建议看看众所周知的算法。正如您提到的那样,您正在使用套接字,我的实际方法是在两个端点之间创建SSL隧道。由于您没有提供有关特定语言的任何信息,因此我无法特别指出任何参考文献。
答案 3 :(得分:2)
您所描述的是一个简单的substitution cipher。这些类型的密码在古罗马使用。对密文的几十个字母进行简单的频率分析,可以完全恢复密钥,使加密与纯文本一样好,直到密钥(替换字母表)发生变化为止。
在您的情况下,其他简单攻击(如重放攻击)也可能具有相关性。攻击者可以重放先前被窃听的命令,并且收件人会认为它完全有效,即使攻击者对密钥一无所知。请注意,即使您以天真的方式使用AES等适当的密码,也可能发生此攻击 - 它可以证明整个协议的安全性有多重要。
正确的加密标准和协议如此复杂是有原因的。对我们来说幸运的是,我们不必自己重新发明或重新实现它们。在这种情况下,一个好的选择可能是TLS。几乎每个平台都有可用的库。
另外值得一试:http://blogs.msdn.com/b/ericlippert/archive/2011/09/27/keep-it-secret-keep-it-safe.aspx