基于密码和偏移量逐字节输出的加密算法

时间:2009-09-09 12:05:00

标签: algorithm encryption

是否有一个众所周知的(被认为)算法可以根据输入的密码和文件内的偏移量加密/解密文件中的任意字节。

(Databyte, Offset, Password) => EncryptedByte
(EncryptedByte, Offset, Password) => DataByte

这种方法是否存在一些根本性的弱点,或者理论上仍然可以将其构建得足够强大

更新: 更多数据:任何加密算法都有输入和输出。对于许多现有的输入,输入操作在大块上。我想只操作一个字节,但基于此的系统默认只能重新映射字节和弱,但如果我们取这个字节的文件中的位置,我们例如可以取这个位置值的位将它们解释为某个步骤(0:xor,1:shitf)上的某些操作,并用此创建加密字节。但这太简单了,我正在寻找更强大的东西。

5 个答案:

答案 0 :(得分:4)

也许这不是很有效但是如何:

用于加密:

encryptedDataByte = Encrypt(offset,key) ^ dataByte

用于解密:

dataByte = Encrypt(offset,key) ^ encryptedDataByte

加密(偏移,密钥)可能是例如3DES或AES(如果需要,填充偏移量,并丢弃除一个结果字节之外的所有内容)

答案 1 :(得分:3)

您可以在AES中使用Counter Mode,将输入划分为16字节(128位)的块,然后基本上对块编号上的计数器进行加密,以获得伪随机16字节你可以用明文进行异或。 非常重要不再对同一个密钥使用相同的计数器起始值(和/或initialization vector),否则您将打开自己进行轻松攻击,攻击者可以使用简单的xor来恢复密钥。

您提到您只想对单个字节进行操作,但这种方法可以为您提供灵活性。 Output Feedback Mode是另一种常见的,但你必须小心使用它。

您可以考虑使用EAX mode来提高安全性。此外,请确保使用PBKDF-2scrypt之类的内容从密码生成加密密钥。

但是,与大多数与加密相关的问题一样,使用经过严格测试和评估的库比使用自己的库更好。

答案 2 :(得分:3)

如果您可以使用16字节的块大小,您可以尝试维基百科文章中描述的关于Disk encryption theory的XTS模式(优点是一些优秀的密码学家已经看过它)。

如果你真的需要按字节加密,我怀疑是否有既定的解决方案。在会议Crypto 2009中,有一个关于如何加密小域上的消息:确定性加密和Thorp Shuffle 的讨论。在你的情况下,域是一个字节,因为这是2的幂,Thorp Shuffle对应于最大不平衡的Feistel网络。也许可以用位置和密码作为关键来构建一些东西,但如果自制解决方案是安全的,我会感到惊讶。

答案 3 :(得分:1)

基本上你需要做的是根据偏移量和密码生成一些值X(可能是1个字节),并使用它来加密/解密该偏移量处的字节。我们称之为

X = f(offset,password)

问题在于,对文件内容“了解某些内容”的攻击者(例如,文件是英文文本或JPEG)可以得出X的估计值(或有时是确定的)。所以他对许多X值有一个“粗略的想法”,对于每一个,他都知道offset是什么。有一个很多的信息。

现在,如果所有这些信息对攻击者都没什么用处,那就太好了。在大多数情况下,使用加密哈希函数(如SHA-1)将为您提供合理的安全保障。

但我必须强调,如果这是至关重要的,咨询专家

答案 4 :(得分:0)

一种可能性是One Time Pad,可能使用密码来播种一些伪随机数生成器。一次填充理论上可以实现完美的保密,但有一些警告。它应该做你想要的。