这种加密是否“安全”?

问题描述

| 我必须首先说我从未学习过密码学,并且我在该主题上所知道的一切只是基本概念。 我们正在寻找一种使用密码来加密某些数据(存储到数据库中)的快速简便的方法。 我知道“最安全”的算法是AES,但是对我们来说可能太复杂了,我知道它需要我们获得美国政府的授权,等等。 我们考虑了这个(简单的)算法,它使我想起了(但我可能错了)某种“一个时间垫”。 (它不是用任何特定的语言编写的……这只是想法:))
// The string we need to encrypt
string data = \"hello world\";

// Long string of random bytes that will be generated the first time we need to encrypt something
string randomData = \"aajdfskjefafdsgsdewrbhf\";

// The passphrase the user selected
string passphrase = \"foo\";

// Let\'s generate the encryption key,using randomData XOR passphrase (repeating this one)
string theKey = \"\";
j = 0;
for(i = 0; i < randomData.length; i++)
{
    theKey += randomData[i] ^ passphrase[j];
    j++;
    if(j == passphrase.length) j = 0;
}

// Encrypt the data,using data XOR theKey (with theKey.length >= data.length)
string encryptedData = \"\";
for(i = 0; i < data.length; i++)
{
    encryptedData += data[i] ^ theKey[i];
}
在磁盘上,我们将仅存储randomData和cryptomedData。 每次都会向用户询问密码短语。 这样的算法有多安全? 除了蛮力外,还有其他方法可以破解吗?我认为统计分析不会对此起作用,对吗? 它像“一次性”一样“安全”吗? 谢谢!     

解决方法

不,这是不安全的。 如果将随机数据与加密数据一起存储,则相当于将密码与XOR进行加密:这是因为攻击者可以简单地将加密数据与随机数据进行XOR,并获得明文XOR密码。     ,您只需导入AES库,然后让它完成所有繁重的工作即可。来自美国政府的授权?它是一种公共功能,美国政府也使用它。     ,这非常薄弱。统计分析将在一瞬间将其破解。一些勤奋的笔墨猜测可能很快也会破解它。 唯一的例外是:(1)a1ѭ来自真正的加密强度来源;(2)
randomData
至少与您的明文数据一样长;(3)
randomData
从未被用于其他消息, (4)您完全摆脱了
passphrase
,并以
randomData
作为您的钥匙。在这种情况下,您将获得一次性的费用。     ,不,这不安全。将此xor与随机数据和密码一起使用是完全错误的。 一次性密码加密需要随机数据的长度与要加密的数据的长度相同。