首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >XOR加密有什么问题?

XOR加密有什么问题?
EN

Stack Overflow用户
提问于 2009-07-16 02:52:04
回答 8查看 54.5K关注 0票数 57

我写了一个简短的C++程序来对文件进行异或加密,我可能会用它来加密一些个人文件(如果它被破解了,也没什么大不了的--我只是为了防止不经意的人浏览)。基本上,我接受一个ASCII密码,并重复将密码与文件中的数据进行异或运算。

不过,现在我很好奇:如果有人想破解这个问题,他们会怎么做?需要很长时间吗?它依赖于密码的长度吗(例如,大O是多少)?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-07-16 02:56:38

XOR加密的问题是,对于相同字符的长时间运行,很容易看到密码。这样的长游程通常是文本文件中的空格。假设您的密码是8个字符,文本文件的某一行有16个空格(例如,在ASCII-graphics表的中间)。如果您只是将其与您的密码进行XOR运算,您将看到输出将具有重复的字符序列。攻击者只需查找任何这样的内容,尝试猜测原始文件中的字符(空格将是第一个尝试的候选字符),并从重复组的长度推导出密码的长度。

二进制文件可能更糟,因为它们通常包含重复的0x00字节序列。显然,带有这些参数的XORing是no-op,所以您的密码将以纯文本形式显示在输出中!具有长序列空的非常常见的二进制格式的一个例子是.doc

票数 124
EN

Stack Overflow用户

发布于 2009-07-16 17:51:55

除了已经提到的几点之外,XOR加密完全容易受到已知明文攻击:

代码语言:javascript
运行
复制
cryptotext = plaintext XOR key
key = cryptotext XOR plaintext = plaintext XOR key XOR plaintext

在XORring中,明文相互抵消,只留下密钥。

不容易受到已知明文攻击是任何“安全”加密方法的必需但不充分的特性,其中相同的密钥用于一个以上的明文块(即,一次性填充仍然是安全的)。

票数 14
EN

Stack Overflow用户

发布于 2011-10-14 18:08:51

使用XOR的方法:

使用多个密钥,每个密钥长度等于一个质数,但不能与密钥长度相同。使用原始文件名作为另一个键,但请记住创建一个检索文件名的机制。然后创建一个带有扩展名的新文件名,让您知道它是一个加密文件。使用多个素数长度的密钥的原因是,它们导致生成的XOR密钥在重复之前是密钥A乘以密钥B的长度。在加密文件之前,压缩文件中的任何重复模式。生成一个随机数,并对此数进行XOR运算(请记住,此数也必须是可重新创建的。您可以使用Filelength的随机种子。

完成所有这些操作后,如果您使用长度为31或更长的5个密钥,则最终的密钥长度约为100兆!

对于密钥,Filename是1(包括完整路径)、STR(文件大小)+STR(文件日期)+STR(日期)+STR(时间)、随机生成密钥、您的全名、一次性创建的私钥。

一个数据库,用于存储用于每个加密文件的密钥,但将DAT文件保存在USB记忆棒上,而不是计算机上。

这应该会防止重复模式的文件,如图片和音乐,但电影,是四个或更长的,可能仍然是脆弱的,所以可能需要第六个密钥。

我个人已经在记忆棒上加密了dat文件(用于Microsoft Access的Dat文件)。我使用了3-Key的方法来加密它,因为它永远不会那么大,因为它是一个包含相关密钥的文件的目录。

使用多个密钥而不是随机生成一个非常大的密钥的原因是,素数乘以素数很快就会变大,我可以控制密钥的创建,你知道真正的随机数是不存在的。如果我创建了一个很大的随机数,其他人也可以生成相同的数。

使用密钥的方法:使用一个密钥加密文件,然后是下一个,然后是下一个,直到使用完所有密钥。重复使用每个密钥,直到使用该密钥加密整个文件。

因为密钥具有不同的长度,所以对于每个密钥,重复的重叠是不同的,因此创建了密钥长度为密钥一乘以密钥二的派生密钥。此逻辑对其余的键重复执行。素数的原因是,重复会发生在密钥长度的除法上,所以您希望除法是1或密钥的长度,hense,质数。

好吧,当然,这不仅仅是对文件进行简单的XOR运算,但概念是相同的。

兰斯

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1135186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档