【发布时间】:2021-11-30 12:28:43
【问题描述】:
在制作保存密码时,我们可以使用盐进行散列。这是通过bcrypt 包完成的,但散列密码不包含完整的盐文本。见这里:
library("bcrypt")
my_password <- "password1"
my_salt <- "$2a$10$abcdefghijklmnopqrstuv"
hashpw(my_password, my_salt)
[1] "$2a$10$abcdefghijklmnopqrstuu2njjerFUdKeNqVoGia/slSqhJQ.vuAy"
所以我使用的盐是"$2a$10$abcdefghijklmnopqrstuv",但散列密码中的文本只包含直到字母u 的盐。但是here 据说:“查看以前的哈希/盐结果,注意哈希是如何附加哈希的盐”。
【问题讨论】:
-
bcrypt 使用 16 字节盐(在 Radix-64 中为 22 个字符)。过长的盐将被相应地截断。
-
@Topaco 我正在使用我认为最短的盐。在我的盐包含字母表的前 22 个字母的问题中,请参见此处:
hashpw(my_password, paste0("$2a$10$", paste0(letters[1:22], collapse= ""), collapse= ""))。但是如果我们使用 21 个字母而不是hashpw(my_password, paste0("$2a$10$", paste0(letters[1:21], collapse= ""), collapse= "")),我们会得到错误Invalid salt。 -
bcrypt salt 是 Radix-64 编码的 22 个字符长。 21 个字符的盐太短,因此出现错误消息。尝试使用
gensalt()生成盐。也许我误解了你。 -
@Topaco 在您的第一条评论中,您说超过
22个字符的盐将被截断。我上面说的是我的盐正好有 22 个字符。看看我使用gensalt(log_rounds= 10)得到了什么:“$2a$10$0bboS2soT8klOBwvVMw1fe”。在这里,就像我的问题一样,$2y$10不是盐的一部分,而是有关算法的信息(参见图片here)。如果您从我的问题中的盐中删除这些信息,您会看到我使用字母表的前 22 个字母作为盐。
标签: r hash cryptography bcrypt salt