假设我有一个32位数字和一个主密钥,并且希望在不增加大小的情况下对其进行加密。
我就是这样加密的,
for (let offset = 0; offset < hash.length - 4; offset++) {
const key = hash.readUInt32BE(offset);
input ^= key;
}安全吗?如果不是,是否有安全的切片机算法可以在不增加数据大小的情况下加密32位(或更少)的数据
我真的很感激你能提供的任何帮助。
发布于 2022-11-27 13:53:25
原则上,您正在创建一个基于秘密密钥和公共信息的密钥流,希望不会重复日期。这是安全的,毕竟这就是流密码的工作方式。
然而,这就是理论,让我们来看看您的计划的实际问题:
至于第二条:你怎么确定你不重复日期?您能100%确定加密方法只在一个特定日期调用一次吗?我假设您使用的日期格式不能自行重复,但时钟差异等仍然是一个问题。
您可能需要的密码类型称为FPS,格式保持加密。作为流密码,它有一点不同的安全性:它是安全的,除非它会为相同的输入创建相同的密文。
然而,可以将密码与所谓的“调整”结合起来,这可能是公开的:
除了模式提供机密性的格式化数据之外,每种模式还需要额外的输入,称为“to”,这不一定是秘密的。调整可以看作是密钥的一个可变部分,因为它们共同决定了加密和解密功能。不同的调整对于FPE模式的实现特别重要,因为机密数据的可能值的数量通常相对较少,如附录A和附录C所讨论的那样。
您的“日期”可能是一个完美的调整,或者至少是一个调整的组件,假设日期不需要额外的存储(这当然会辜负FPS计划的目的)。原则上,对于每个纯文本(如当前日期)来说,一个不断变化的输入并不是调整的最佳输入。与纯文本相关的不改变的数据元素上的散列将更好,例如,类似于用户ID +列名。
FPE的一个实际缺点是它经常从主流密码库中缺失。它也有一些中断和与其相关的密码安全,特别是对小域名-所以请保持警惕,不要仅仅使用任何FPE方案或实现。
https://crypto.stackexchange.com/questions/102994
复制相似问题