我有一个密码以 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/