Col*_*lin 52 security encryption xor
我写了一个简短的C++程序来对一个文件进行XOR加密,我可以将它用于一些个人文件(如果它被破解它没什么大不了的 - 我只是在防范偶然的观众).基本上,我使用ASCII密码并使用文件中的数据重复XOR密码.
但现在我很好奇:如果有人想破解这个问题,他们会怎么做呢?需要很长时间吗?它取决于密码的长度(即什么是大O)?
Pav*_*aev 115
XOR加密的问题是,对于相同字符的长时间运行,很容易看到密码.这种长时间运行通常是文本文件中的空格.假设您的密码是8个字符,文本文件在某行中有16个空格(例如,在ASCII图形表的中间).如果您只是使用密码对其进行异或,您将看到输出将具有重复的字符序列.攻击者只会查找任何此类内容,尝试猜测原始文件中的字符(空格将是第一个尝试的候选者),并从重复组的长度中获取密码的长度.
二进制文件可能更糟糕,因为它们通常包含重复的0x00
字节序列.显然,与那些XORing是无操作的,所以你的密码将在输出中以纯文本显示!具有长序列空值的非常常见的二进制格式的示例是.doc
.
Gen*_*neQ 67
我同意Pavel Minaev 对XOR弱点的解释.对于那些感兴趣的人,这里是用于在几分钟内打破琐碎的XOR加密的标准算法的基本概述:
确定密钥的长度.这是通过对加密数据进行异或运算来实现的,该数据本身移动了不同数量的位置,并检查了多少字节是相同的.
如果相等的字节大于某个百分比(根据Bruce Schneier的Applied Cryptography第二版的 6%),那么您已将数据移动了密钥长度的倍数. 通过找到导致大量相等字节的最小移位量,您可以找到密钥长度.
按键长移动密文,并对其自身进行异或. 这将删除密钥,并使用明文进行异或,并使用明文移动密钥的长度.应该有足够的明文来确定消息内容.
有关详细信息,请参阅加密事项,第1部分
Sin*_*ion 22
如果满足以下条件,则XOR加密可以合理地强*:
*合理强大意味着它无法通过琐碎的数学手段打破,如GeneQ的帖子.它仍然没有你的密码强.
laa*_*lto 12
除了已经提到的要点之外,XOR加密完全容易受到已知明文攻击:
cryptotext = plaintext XOR key
key = cryptotext XOR plaintext = plaintext XOR key XOR plaintext
Run Code Online (Sandbox Code Playgroud)
XORring明文互相取消,只留下钥匙.
不易受已知明文攻击的影响是任何"安全"加密方法的必需但不充分的属性,其中相同的密钥用于多于一个的明文块(即,一次性密钥仍然是安全的).
小智 6
如何使XOR工作:
使用多个密钥,每个密钥长度等于素数,但密钥的长度从不相同.使用原始文件名作为另一个键,但记住创建一个检索文件名的机制.然后创建一个带有扩展名的新文件名,让您知道它是加密文件.使用素数长度的多个密钥的原因是它们在重复之前导致所得到的XOR密钥长度为密钥A TIMES密钥B. 在加密之前压缩文件中的任何重复模式.每X偏移生成一个随机数并对此数字进行异或(请记住,此数字也必须是可重新计算的.您可以使用Filelength的随机种子.
完成所有这些操作后,如果您使用长度为31或更大的5个键,您最终的键长约为一百兆!
对于密钥,文件名为1(包括完整路径),STR(文件大小)+ STR(Filedate)+ STR(日期)+ STR(时间),随机生成密钥,您的全名,一次创建私钥.
一个数据库,用于存储用于加密的每个文件的密钥,但将DAT文件保存在USB记忆棒上而不是计算机上.
这应该可以防止像图片和音乐这样的文件上出现重复模式,但是长度为4或者以上的电影可能仍然容易受到攻击,因此可能需要第六个密钥.
我个人在记忆棒(用于Microsoft Access的Dat文件)上加密了自己的dat文件.我使用3键方法对其进行加密,因为它永远不会那么大,是具有相关键的文件的目录.
多个键而不是随机生成一个非常大的键的原因是素数时间素数变得很快并且我对键的创建有一些控制权并且你知道真的没有真正的随机数这样的东西.如果我创建了一个大的随机数,则其他人可以生成相同的数字.
使用密钥的方法:用一个密钥加密文件,然后用下一个密钥加密,然后用下一个密钥加密.每个密钥都反复使用,直到用该密钥加密整个文件.
因为密钥的长度不同,所以每个密钥的重复重叠是不同的,因此创建一个导出密钥,密钥一次密钥二的长度.这个逻辑重复其余的键.素数的原因是重复会发生在键长的一个除法上,所以你希望除法为1或键的长度,hense,prime.
好的,被授予,这不仅仅是文件上的简单XOR,但概念是相同的.
长矛
我只是在防止不经意的观众
只要这个假设成立,你的加密方案就可以了。认为 Internet Explorer 是“互联网”的人无法破解它。
如果没有,只需使用一些加密库。已经有很多很好的算法,比如用于对称加密的 Blowfish 或 AES。