我为工具设计了一个用户界面,用户需要输入最多300个字符的“名称”,工具会生成一个文本文件(“Name”.txt),然后上传到“服务器“(大型机和Unix)。我想将300个字符串缩短为唯一可识别的8个字符串(因为主要在大型机中存在问题),类似于使用某种散列算法的微小字符串。我找到了SHA1实现,但结果字符串长度为40个字符。有人可以为算法建议VBA实现吗?
结果字符串长度为8个字符的要求是严格的 - 我的猜测是它应该是可行的,因为我们对输入字符串的大小有限制。
答案 0 :(得分:3)
你可以只取SHA1哈希的前八个字符。
但这些哈希值(如原始的40个字符版本)并不保证是唯一的。如果您需要唯一性,您可能需要将每个名称与其短版本存储在一起,并且只发出目前尚未使用的短名称。 (这就是tinyurl所做的。)
答案 1 :(得分:1)
我认为Jens的想法应该运作得很好。 如果截断SHA-1哈希不是你的事,你可以使用CRC-32(来自0..f的32位~8个ascii字符)。 (您可以尝试使用this example) 就碰撞而言,CRC-32的安全性较低,但最终取决于你。