4

私は sha1($password) の出力としてデータベースに保存されたパスワードを持つ PHP アプリケーションを持っています。これは明らかにバイナリ SHA1 ハッシュの 16 進表現です。(私が理解しているように)

それを Apache .htpassword ファイルと互換性のある形式に変換したいと思います。これは、base64 でエンコードされたバイナリ値または base64_encode(sha1($password, true)) の出力である必要があります。

私はこのスレッドを見つけました: Convert base64'd SHA1 hashes to Hex hashs ... これは、私がする必要があることとは逆のことをしており、うまく機能します。コマンドの順序を変更して、bin2hex の代わりに hex2bin を使用しようとしましたが、うまくいきません。

致命的なエラー: 行 1 の php シェル コードの未定義関数 hex2bin() の呼び出し

どうやらそれはPHP 5.4まで利用できず、このサーバーはまだ5.3.xにあります http://php.net/manual/en/function.hex2bin.php

ここに本当の問題があります。私は実際にそれを PERL に変換する必要があり、できればすべてをシンプルに保つために標準の組み込みモジュールのみを使用します。なぜ彼らがこのステップで perl を使用しているのかはわかりませんが、大きなアプリケーションの非常に小さな部分を編集しようとしていて、まだ全体を変更したくありません :)

明確にするために、16 進数を 2 進数に変換しようとしているわけではありません。これはバイナリ値の16進表現で、perlの「文字列」に格納されています:)

前もってありがとう、トミー

4

1 に答える 1

6

あなたはとても多くのことを説明しますが、あなたが何を望んでいるかについてはまだ私には確信が持てません:/

あなたが望むのは、16進文字列からblobからbase64文字列に変換することである場合、これはあなたの質問の一番上の段落であなたが望むものです.

use MIME::Base64;
my $bin = pack "H*", $hex_str;
my $encoded = encode_base64($bin);

あなたが望むものと正確に一致します: base64_encode(sha1($password, true))

以前の回答と編集は無視してください。

于 2012-07-08T08:01:26.440 に答える