在哈希创建唯一ID之前连接或"xor"键?

C2T*_*8SN 1 security hash sha1 xor

我想为设备创建一个唯一的id,所以我决定创建SHA1(mac XOR时间戳XOR user_password).有没有与此相关的安全问题?做SHA1(mac CONCATENATE timestamp CONCATENATE user_password)会更好吗?

谢谢

Luk*_*keH 5

使用连接 - 然后您将基于所有可用的源数据进行哈希处理.

如果您使用XOR,则存在一个风险,即一个源数据将在其传递到散列函数之前"取消"剩余数据的一些(或全部)位.

连接而不是XORing不会影响存储哈希所需的空间 - 无论源数据的大小如何,生成的SHA1哈希都将始终为20个字节.

  • @ user529361:问题实际上并不是哈希的优势,而是源数据的"唯一性".例如,`SHA1(1 ^ 2 ^ 3)`==`SHA1(1 ^ 3 ^ 2)`==`SHA1(2 ^ 1 ^ 3)`==`SHA1(2 ^ 3 ^ 1)`= =`SHA1(3 ^ 1 ^ 2)`==`SHA1(3 ^ 2 ^ 1)`,而`SHA1(123)`!=`SHA1(132)`!=`SHA1(213)`!=` SHA1(231)`!=`SHA1(312)`!=`SHA1(321)`等等 (2认同)