作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想创建一个可用作加密 key 的 32 位字符串。此字符串/ key 应派生自纯文本字符串,例如:
'I am a string'
我的方法首先是对其进行哈希处理:
hashed_string = Digest::SHA1.hexdigest('I am a string') # => 'bd82fb0e81ee9f15f5929e0564093bc9f8015f1d'
然后只使用前 32 个字符:
hashed_string[0..31] # => 'bd82fb0e81ee9f15f5929e0564093bc9'
但是,我觉得一定有更好的方法,我不确定我是否冒着 2 个输入字符串产生相似键的风险。
什么是更好的方法?我看过this post涉及截断,但在那里找不到吸引我的答案。
最佳答案
如果你想要一个 32 位的字符串(弱)密码:
Digest::SHA1.digest('I am a string').unpack('B32').first
#=> "10111101100000101111101100001110"
同样的信息量也可以用8个16进制数显示:
Digest::SHA1.hexdigest('I am a string')[0,8]
#=> "bd82fb0e"
或 4 个 ascii 字符:
Digest::SHA1.digest('I am a string')[0,4]
#=> "\xBD\x82\xFB\x0E"
关于ruby - 如何将 SHA1 哈希字符串截断为 32 位字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41167555/
我是一名优秀的程序员,十分优秀!