ruby - 将 SHA1 密码转换为其二进制形式

标签 ruby bash sha1 hexdump

我有一个密码以 SHA1 加密的数据库,我需要将它们转换为 SHA1 二进制形式并使用 base64 进行编码,我怎样才能得到它?

这是我的:

# echo -n "password" | openssl sha1
5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8

这是我需要的:

# echo -n "password" | openssl sha1 -binary | base64
W6ph5Mm5Pz8GgiULbPgzG37mj9g=

最佳答案

require 'digest/sha1'
require 'base64'

Base64.encode64(Digest::SHA1.digest('password'))
# => "W6ph5Mm5Pz8GgiULbPgzG37mj9g=\n"

虽然这会添加一个换行符,因此您可能需要使用

Base64.encode64(Digest::SHA1.digest('password')).chop
# => "W6ph5Mm5Pz8GgiULbPgzG37mj9g="

或者更简单,正如@FrederickCheung建议的那样:

Digest::SHA1.base64digest('password')

编辑

当你只有 SHA-1 编码的十六进制字符串时,然后做

require 'base64'

pass = "5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8"
Base64.encode64([pass].pack('H*')).chop
# => "W6ph5Mm5Pz8GgiULbPgzG37mj9g="

或者您甚至可以绕过 base64 库并完全依赖 pack:

[[pass].pack('H*')].pack('m0')
# => "W6ph5Mm5Pz8GgiULbPgzG37mj9g="

关于ruby - 将 SHA1 密码转换为其二进制形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11393988/

相关文章:

ruby - 为什么这个字符串值是一个数字?

regex - 如何处理每个结果 - 而不是 grep (oz) 命令的行(早于 2.25)

linux - While Read 存储每个没有空格的用户条目

php - 用盐散列密码后如何登录? <==编辑版本 #2 ==>

node.js - 为什么 node.js SHA1 主体与 GitHub webhook SHA1 值不同?

ruby-on-rails - 使用 xpath 在 selenium 中检索文本?

ruby - 如何读取压缩的 CSV 文件的特定列

ruby - 在另一种哈希常见做法中保存哈希吗?

bash - 在每个时间 block 之间添加空行

php - 在 ColdFusion MX7 和 PHP 5.x 上工作相同的散列函数?