如何在 PHP 中生成具有一些特殊规则的哈希字符串?
我正在开发一个项目,需要使用一些哈希函数来生成哈希字符串。该哈希字符串应该是唯一的,由 6 到 13 个字符(固定长度)组成。
我使用数据库来存储数据,因此对于每条记录,我都有一个唯一的 ID。我想使用这个唯一的 ID 来制作哈希字符串(以实现结果哈希字符串的唯一性)。
我需要这个哈希字符串仅包含有效字符(0-9 az AZ)。
我应该使用哪个哈希函数来实现这个目标?我怎样才能生成这样的哈希字符串?
稍后添加:我想生成此字符串并将其传递给用户,以便他稍后可以回来编辑条目。任何其他想法都是可以接受的。
I'm working on a project where I need to use some hash function to make a hash string. This hash string should be unique consists of 6 to 13 characters (fixed length).
I use a database to store data, so for each record, I have a unique ID. I want to use this unique ID to make a hash string ( to achieve uniqueness of resulted hash string).
I need this hash string to consists of only valid characters ( 0-9 a-z A-Z).
Which hash function should I use to achieve this goal? How can I generate such hash strings?
Added Later: I want to generate this string and pass it to user, so he can come back later to edit the entry. any other idea is acceptable.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
使用 crypt:
唯一的 id 是一个盐,因此您可以根据 id 生成不同的值。因此,如果一个用户的密码为“somevaluetohash”,而另一个用户也有相同的密码,则结束哈希不会相同。
Use crypt:
The unique id is a salt so you can generate different values depending on the id. So if one user had a password of "somevaluetohash" and another user had the same, the ending hash wouldn't be the same.
使用 hash() 进行其他哈希算法。
但是你需要这个哈希值做什么呢?对我来说,从 ID 生成哈希值没有多大意义,难道你不能只使用 ID 来代替吗?
Use hash() for other hashing algorithms.
But what do you need this hashes for? To me, it doesn't make a lot of sense to generate a hash from the ID, couldn't you just use the ID instead?
它真的需要是加密校验和吗?或者更简单的校验和是否合适?是不是数据库提供的主键本身不合适?
您有很多选择,从最简单的 crc32 到最高级sha512。
但是,如果您针对某些特定应用程序执行此操作(例如 文件系统哈希,或使用一些指标查找附近的对象),那么您将必须详细说明您的问题。
Does it really need to be a cryptographic checksum? Or is a simpler checksum suitable? Is the database-provided primary key itself not suitable?
You've got lots of options, from the simplest crc32 to most-advanced sha512.
But if you're doing this for some specific application (such as filesystem hashing, or finding nearby objects using some metrics), then you're going to have to specify more of your problem.