如何在 PHP 中生成具有一些特殊规则的哈希字符串?

发布于 2024-09-08 01:47:44 字数 301 浏览 6 评论 0原文

我正在开发一个项目,需要使用一些哈希函数来生成哈希字符串。该哈希字符串应该是唯一的,由 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

牵你手 2024-09-15 01:47:44

使用 crypt:

$hash = crypt("somevaluetohash", $uniqueid);

唯一的 id 是一个盐,因此您可以根据 id 生成不同的值。因此,如果一个用户的密码为“somevaluetohash”,而另一个用户也有相同的密码,则结束哈希不会相同。

Use crypt:

$hash = crypt("somevaluetohash", $uniqueid);

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.

说好的呢 2024-09-15 01:47:44
<?php
  $id;
  $hash_full = md5($id); //hash('sha256', $id);
  $hash_cropped = substr($hash_full, 0, 6);
?>

使用 hash() 进行其他哈希算法。

但是你需要这个哈希值做什么呢?对我来说,从 ID 生成哈希值没有多大意义,难道你不能只使用 ID 来代替吗?

<?php
  $id;
  $hash_full = md5($id); //hash('sha256', $id);
  $hash_cropped = substr($hash_full, 0, 6);
?>

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?

脱离于你 2024-09-15 01:47:44

它真的需要是加密校验和吗?或者更简单的校验和是否合适?是不是数据库提供的主键本身不合适?

您有很多选择,从最简单的 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文