我想用一个短于明文的单个密钥加密纯随机数据。
我应该使用AES还是其他强大的加密算法,还是可以使用OTP,即只使用唯一密钥逐行(纯随机)明文?
E.g。数据长度为1024位,是随机的。密钥长度为128位(随机也是如此)。通过使用相同的密钥对8个连续的128位块进行编码来加密数据是否安全?
答案 0 :(得分:1)
您的问题是“通过使用相同的密钥对8个连续的128位块进行编码来加密数据是否安全?”
这不是一次性垫。 One-Time-Pad使用一次,仅使用一次。对部分未加密数据的任何妥协都将允许恢复全部或部分密钥,从而恢复更多未加密数据。
安全加密方案可以防止攻击者知道部分或全部明文:“已知的明文攻击”。你的计划不安全;它容易受到已知的明文攻击。
答案 1 :(得分:0)
E.g。数据长度为1024位,是随机的。密钥是128位长(随机 太)。通过xored 8个连续的128位块加密数据是否安全 用同样的钥匙?
如果您的数据是随机的,那么答案是肯定的。
您可以在此处将实际数据视为OTP密钥。它纯粹是随机的,只使用一次,因此无法恢复密钥或数据。
答案 2 :(得分:0)
如果数据本身是随机的,则它与文本空间同样可能,因此任何转换都将导致安全。 XOR或流密码保持块在密文中的关系如下所示。
from Crypto.Cipher import ARC4
key = '1234567812345678'
obj1 = ARC4.new(key)
obj2 = ARC4.new(key)
d1= obj1.encrypt('\x01\x82\x83\x04\x05\x06\x10\x81\x23\x32\x33\x34')
d2= obj2.encrypt('\x81\x02\x83\x84\x85\x86\x90\x01\xa3\xb2\x33\xb4')
print repr(d1)
print repr(d2)
p1='';p2=''
for i in d1:
if ord(i)>=128: p1+=chr(ord(i)-128)
else: p1+=chr(ord(i))
print; print
for i in d2:
if ord(i)>=128: p2+= chr(ord(i)-128)
else: p2+=chr(ord(i))
print p1==p2`
输出:
'\xbaq\xba\xd0\x0c\xb7\xce&\xd3\x019\xfb'
':\xf1\xbaP\x8c7N\xa6S\x819{'
True