我有一个长在我的数据库。 我想对它进行加密。 我可以使用XOR,但不是很安全的,因为一个模式可以看出和XOR值可以透露。 IIRC AES有一个键和其可(谈论随机数时)被认为是一个种子一个initialize向量(IV)。 我相信IV应随机发。 这是为了与加密密钥相同的数据时,会发生不同的图案。
我怎么可能安全加密64位? 我怀疑它可能不是忠实地安全瓦特/ OA随机IV /种子。 但我不想存储。 此刻的另一种选择我能想到的是有一个加密RNG并运行它说10000次,如果该值则第10000指数异或值。 但性能明智的没有规模。
如何正确和安全加密64bits的W / O存储额外位为每64位? 我想,也许用饲料(种子XOR指数)中的密码RNG运行X次和异或以该值。 但我有一种感觉,有人有更好的主意吗?
AES具有块大小为128位,所以如果你使用,你最终会尽可能多的填充加密的有意义的数据。
可以使用DES (或,优选地, 3DES ),因为它的块大小是64位。
该初始化向量应该不难攻击者预测,但像关键是它实际上不是秘密,所以它可以通过算法来选择; 参见,例如, ESSIV算法用于产生每个扇区的IV为磁盘加密。 你可以使用相同的方案 - 只是一些类似于像记录的唯一的ID号取代“扇区号” - 所以你实际上并没有存储IV,只是用算法的解密时间重新生成。 (但是,如果你曾经修改记录的唯一ID,请确保您解密和重新加密用新的IV!)
你能避免使用IV完全如果您加密使用ECB模式 ,但是这不是一个真正的好主意。 对于给定的关键,同样的明文加密总是在ECB模式相同的密文,因此攻击者将能够看到你的秘密号码是两个记录相同,即使他不能确定实际价值。 假设你没有使用不同的密钥 ,每个记录,你想有每个记录的不同IV。
如果你有某种类型的索引,可以使用CTR模式加密,指数是一个即时数。 在这种情况下,你可以放心地使用AES。 被警告,有一个重要的警告:如果您使用相同的随机数确定第二次,那么你泄露纯文本(因为可以获取密钥流)。 如果攻击者能够及时查看系统,这也可能保持加密新值到数据库中。