这种加密是"安全的"吗?

Ita*_*Ale 4 security encryption cryptography

我必须首先说我从未研究过密码学,而我在这个主题上所知道的只是基本概念.

我们正在寻找一种使用密码加密某些数据(存储到数据库中)的快速简便方法.我知道"最安全"的算法是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];
}
Run Code Online (Sandbox Code Playgroud)

在磁盘上,我们将只存储randomData和encryptedData.每次都会向用户询问密码.

这样的算法有多安全?除了蛮力外,还有其他方法可以破解吗?我不认为统计分析会对此有用,是吗?它是"像一次性垫一样安全吗?

谢谢!

CQM*_*CQM 9

您只需导入一个AES库,让它完成所有繁重的工作.美国政府的授权?这是一项公共职能,美国政府也使用它.


Luk*_*keH 5

这非常弱.统计分析会在眨眼之间破解它.一些勤奋的纸笔猜测也可能很快破解它.

唯一的例外是,如果(1) randomData从一个真正的加密强度源截取,(2) randomData是至少只要你的明文数据,(3) randomData是从来不曾重新用于不同的消息,和(4 )你摆脱了passphrase完全和治疗randomData为您的钥匙.在那种情况下,你有一个相当于一次性垫.


caf*_*caf 5

不,这不安全.

如果随机数据与加密数据一起存储,那么它就等同于使用密码短语进行异或运算:这是因为攻击者可以简单地用随机数据对加密数据进行异或,并获得明文XOR密码短语作为结果.