我正在生成类似于 Stripe 的 API 密钥,其中我的密钥是 {prefix}_{guid}_{suffix}。
应该对整个字符串 {prefix}_{guid}_{suffix} 进行哈希处理还是仅对 {guid} 进行哈希处理?如果只对 guid 进行哈希处理,那么将后缀存储在数据库中的哈希旁边是否存在安全问题?
我读过一些博客,但没有发现太多涉及此的内容。
在散列之前向值添加随机前缀和/或后缀称为 salting。这是推荐的做法。
目的是防止某人知道,例如,UserA 是否与 UserB 具有相同的密码,因为它们的哈希值是相同的。因此,您为每个用户添加一个加密安全的随机值前缀/后缀(盐),那么即使他们使用相同的密码,他们的哈希值也将始终不同。
但就您而言,如果您已经提供了版本 4 GUID 作为预哈希值,则保证它是唯一的,因此您无需添加盐。