現在、MongooseIM を少しいじっていて、スクラムと一緒に HTTP 認証を使用したいと考えています。python passlib を使用してスクラム ハッシュを作成しています。
import sys
from passlib.hash import scram
def main():
hash = scram.encrypt(sys.argv[1], rounds=4096, salt_size=16)
print hash
if __name__ == "__main__":
main()
それから私はこのようなものになります:
$scram$4096$BmAsRcgZA4AwRijl3FtLyQ$sha-1=AXh5FzYzEnf6PaVQNR79AZhkwz8,sha-256=YZceXCVhfCBrr8sM9k3eS.5bztHugerGzjO97emvn20,sha-512=2NyVspiE7MP6xBAEycAV5Z/nIbBlki3sHfWvVUPPnEkMt5b4VbZfDZ0s8lvE/ns0scPGWmfKhUobmZbjfFH6RA
残念ながら、この形式は MongooseIM の HTTP 認証では受け入れられません。私はコードを見て、スクラムのハッシュ化されたパスワードのシリアル化された形式がどのように見えるかを調べようとしました: https://github.com/esl/MongooseIM/blob/master/apps/ejabberd/src/scram.erl
deserialize(<<?SCRAM_SERIAL_PREFIX, Serialized/binary>>) ->
case catch binary:split(Serialized, <<",">>, [global]) of
[StoredKey, ServerKey,Salt,IterationCount] ->
{ok, #scram{storedkey = StoredKey,
serverkey = ServerKey,
salt = Salt,
iterationcount = binary_to_integer(IterationCount)}};
_ ->
?WARNING_MSG("Incorrect serialized SCRAM: ~p, ~p", [Serialized]),
{error, incorrect_scram}
end;
passlib から、私が理解している限り、ソルト、反復回数、およびソルト (ハッシュ) パスワードの実際のダイジェスト (sha-1、sha-256、sha-512) を取得しますが、StoredKey と ServerKey はどうですか?アーランコード? host/get_password によって返される正しいシリアライズされた HTTP 本文はどのようになりますか?
前もってありがとう、マグナス