我正在使用 QR 码条形码将 UUID 存储在我的系统中,我需要检查生成的条形码是否是我的,而不是其他人的。我还需要保持编码数据简短,以便 QR 码保持在较低版本范围内并易于扫描。
我的方法是采用 UUID 原始值编号(128 位值)和 16 位校验和,然后在转换为 QR 码之前对该数据进行 Base64 编码。到目前为止一切顺利,这非常有效。
为了生成校验和,我采用 UUID 的字符串版本并将其与一个长秘密字符串组合,并对奇数字节进行异或运算以生成 SHA-1 哈希。但是这个散列太长了,所以我将所有旧字节异或在一起以产生一半的校验和,同样与偶数字节产生另一半。
让我担心的是,我通过 XORing 不必要地损害了 SHA-1 系统。从结果中的某处获取两个未经处理的字节会更好吗?我承认 16 位校验和不如 160 位校验和安全,但这是我必须为条形码的可用性付出的代价。我真正不想找到的是,我现在提供了一个易于破解的校验和,因为 UUID 是明文传输的。
如果有更好的方法来生成校验和,这也将是该问题的合适答案。一如既往地非常感谢您抽出宝贵的时间或只是阅读本文,如果您发布答案,请加倍感谢。