3

パスワードがSHA1で暗号化されたデータベースがあり、それらをSHA1バイナリ形式に変換し、base64でエンコードする必要があります。どうすれば取得できますか?

これは私が持っているものです:

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

これは私が必要なものです:

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

3 に答える 3

4
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でエンコードされたパスワードの16進文字列しかない場合は、次のようにします。

require 'base64'

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

または、ライブラリをバイパスして、以下base64にのみ依存することもできpackます。

[[pass].pack('H*')].pack('m0')
# => "W6ph5Mm5Pz8GgiULbPgzG37mj9g="
于 2012-07-09T12:12:35.480 に答える
2

Python 3のアプローチ:

import sys, base64

def hex_to_b64(word):
    number = int(word, base=16)
    bytestr = number.to_bytes(20, 'big')
    b64 = base64.b64encode(bytestr).decode('ascii')
    return b64

if __name__ == '__main__':
    for word in sys.argv[1:]:
        print(hex_to_b64(word))

これは

localhost-2:coding $ python3 shaswitch.py 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
W6ph5Mm5Pz8GgiULbPgzG37mj9g=
于 2012-07-09T12:19:42.240 に答える
2

なぜPythonに頼るのか。OPはbashが欲しかった:

% openssl sha1 -binary <(echo -n 'password') | base64
W6ph5Mm5Pz8GgiULbPgzG37mj9g=
于 2016-04-21T20:35:27.577 に答える