我正在编写一个程序,并且喜欢实现数据验证系统。它需要为输入的任何值返回唯一的字符串。我的问题归结为:AES函数是否可以为两个不同的条目返回相同的值?源值将来自磁条卡上保存的数据。
我最初是通过手机发布的,我现在回到这个帖子。
我一直在浏览网页,在SHA上阅读Wikipedia's article时,我发现SHA-2(SHA-256/224,SHA-512/384)没有检测到碰撞(假设文章是准确/跟上时代的)。这是可取的。关于我应该使用什么版本的SHA-2的任何建议?
答案 0 :(得分:2)
只要对所有计算使用相同的键和初始化向量,AES就永远不会返回相同的值。你只需要加密数据。通常你会使用散列算法,因为所有散列都与输入无关,而AES则给出与输入长度成比例的结果。
不可能的原因很明显 - 如果AES会对同一输出的不同输入进行加密,则无法再次解密该消息,因为会有多个可能的去除消息。
答案 1 :(得分:2)
AES是一种加密方案,而不是散列方案,因此在其简单的应用程序中,只要您的消息,它就会返回一块数据,但是会加密。对于任何唯一的消息,密文也将是唯一的。
听起来你想要的是数据的哈希或“摘要” - 看看像SHA256这样的东西。无论数据长度如何,这都将为您提供固定长度的结果。这意味着不可避免地存在多个不同的输入,这些输入将提供相同的输出,但是它们在非常大的空间中非常薄地分布。
您应该使用的哈希类型取决于您是否尝试防止恶意企图破坏您的方案,或者只是针对随机错误。
答案 2 :(得分:1)
根据新问题,我会说:
你应该使用你想要的任何版本的SHA,因为你有足够的存储空间来容纳它。
我几乎总是将SHA-512用于所有内容,因为它具有最低的冲突几率,而64字节通常足够小以便存储。
答案 3 :(得分:0)
对于相同的输入,AES不一定会返回相同的值两次,只给出相同的密钥。
您应该使用强哈希算法,例如SHA。
但是,为了回答您的问题,在给定相同的密钥和IV的情况下,AES不可能为两个不同的输入返回相同的值。
答案 4 :(得分:0)
请记住,这里有两种方案。
一个用于加密,其思想是密文或加密哈希尽可能少地提供原始文件。出于安全考虑,这就是您想要的。
一个用于错误检测和纠正,在这种情况下,您需要尽可能多的原始信息。这就是您想要的数据完整性目的。
如果您获取文件的加密哈希值,您稍后可以告诉的是它是否是完全相同的文件。如果你使用某种错误检测方案,你可以告诉一些错误。