Security 尽可能缩短输出-维护安全属性

Security 尽可能缩短输出-维护安全属性,security,hash,digital-signature,truncate,Security,Hash,Digital Signature,Truncate,我有一个问题,我已经尝试解决了几天了,但似乎我卡住了! 问题是,给定一段数据,我需要生成的输出必须是: 其他人无法复制。 独一无二。 Short(因为它将在URL中使用) 因此,我决定用私钥对给定的数据进行签名,然后对结果进行散列,这样我相信前面两个属性都包括在内。 现在,为了得到尽可能简短的最终结果,我开始阅读,我遇到了,关于截断散列,我引用 就截断散列而言,这很好。这是明确的 NIST认可,SHA-2系列中有哈希函数 是其完整兄弟的简单截断变体: SHA-256/224、SHA-512/


我有一个问题,我已经尝试解决了几天了,但似乎我卡住了! 问题是,给定一段数据,我需要生成的输出必须是:

  • 其他人无法复制。
  • 独一无二。
  • Short(因为它将在URL中使用)
因此,我决定用私钥对给定的数据进行签名,然后对结果进行散列,这样我相信前面两个属性都包括在内。 现在,为了得到尽可能简短的最终结果,我开始阅读,我遇到了,关于截断散列,我引用

就截断散列而言,这很好。这是明确的 NIST认可,SHA-2系列中有哈希函数 是其完整兄弟的简单截断变体: SHA-256/224、SHA-512/224、SHA-512/256和SHA-512/384,其中SHA-x/y 表示截断为y位的全长SHA-x

在阅读了更多关于这方面的内容后,我决定使用SHA256并将其截断为128位。 因为它必须在URL中使用,所以我将最终结果解析为Base62(Base64使用
=
符号,它们在URL环境中具有不同的含义)

最后的结果是一个包含24个字符的字符串,我认为这很好,但似乎还不够好。 我需要把它缩短(大约10个字符)。这件事我已经讨论了好几天了,我开始失去主意了。
有人有什么建议吗?有什么我可以试试的吗


多谢各位

%20算作1还是3,您是否考虑过将SHA-256截断为64位?它将算作3个字符……您的“唯一”标准@Snox有多严格。此外,我猜你不想储存这些。这是为了安全、性能还是无状态?对于您想要的东西没有解决方案,但是从我可以告诉您的情况来看,您遇到了达到最大URL大小的问题。考虑对URL的其他部分进行压缩,占用了大部分长度,并使用空闲空间进行更长的哈希…否则,您的实现听起来很好。对于压缩,我能给出的最佳建议是寻找模式,而不是忘记转义字符。并查找一行中有20个转义字符的角落案例。