0

我正在使用 QR 码条形码将 UUID 存储在我的系统中,我需要检查生成的条形码是否是我的,而不是其他人的。我还需要保持编码数据简短,以便 QR 码保持在较低版本范围内并易于扫描。

我的方法是采用 UUID 原始值编号(128 位值)和 16 位校验和,然后在转换为 QR 码之前对该数据进行 Base64 编码。到目前为止一切顺利,这非常有效。

为了生成校验和,我采用 UUID 的字符串版本并将其与一个长秘密字符串组合,并对奇数字节进行异或运算以生成 SHA-1 哈希。但是这个散列太长了,所以我将所有旧字节异或在一起以产生一半的校验和,同样与偶数字节产生另一半。

让我担心的是,我通过 XORing 不必要地损害了 SHA-1 系统。从结果中的某处获取两个未经处理的字节会更好吗?我承认 16 位校验和不如 160 位校验和安全,但这是我必须为条形码的可用性付出的代价。我真正不想找到的是,我现在提供了一个易于破解的校验和,因为 UUID 是明文传输的。

如果有更好的方法来生成校验和,这也将是该问题的合适答案。一如既往地非常感谢您抽出宝贵的时间或只是阅读本文,如果您发布答案,请加倍感谢。

4

1 回答 1

0

没有理由进行任何异或运算。简单地取前两个字节将是(in)安全的。

为了使代码版本尽可能小,您可能希望将 144 位值转换为十进制字符串并对其进行编码。QR 码具有不同的字符集并有效地编码数字。Base64 只能在 QR 码中编码为 8 位值,因此您可以在此处添加 30%。

于 2012-08-04T06:55:17.400 回答