1

bacula 用の python クライアントを作成しようとしていますが、認証に問題があります。

アルゴリズムは次のとおりです。


import hmac
import base64
import re

...

challenge = re.search("auth cram-md5 ()", data)
#exemple ''
passwd = 'b489c90f3ee5b3ca86365e1bae27186e'
hm = hmac.new(passwd, challenge).digest()
rep = base64.b64encode(hm).strp().rstrip('=')
#result with python : 9zKE3VzYQ1oIDTpBuMMowQ
#result with bacula client : 9z+E3V/YQ1oIDTpBu8MowB'

ベース64のbaculaの実装を移植するよりも簡単な方法はありますか?

整数
bin_to_base64(char *buf、int buflen、char *bin、int binlen、int 互換)
{
   uint32_t reg、保存、マスク;
   int rem、私;
   int j = 0;

   reg = 0;
   レム = 0;
   ブフレン--; /* EOS の保存を許可します */
   for (i=0; i >= (rem - 6);
      もし (j
4

2 に答える 2

1

CRAM-MD5 の実装を検証するには、いくつかの単純なテスト ベクトルを使用し、予想される出力に対して (チャレンジ、パスワード、ユーザー名) 入力の組み合わせをチェックすることをお勧めします。

一例を次に示します ( http://blog.susam.in/2009/02/auth-cram-md5.htmlから):

import hmac
username = 'foo@susam.in'
passwd = 'drowssap'
encoded_challenge = 'PDc0NTYuMTIzMzU5ODUzM0BzZGNsaW51eDIucmRzaW5kaWEuY29tPg=='
challenge = encoded_challenge.decode('base64')
digest = hmac.new(passwd, challenge).hexdigest()
response = username + ' ' + digest
encoded_response = response.encode('base64')
print encoded_response
# Zm9vQHN1c2FtLmluIDY2N2U5ZmE0NDcwZGZmM2RhOWQ2MjFmZTQwNjc2NzIy

とはいえ、上記のコードによって生成された応答が関連サイトに記載されている期待される応答と異なる例をネット上で確かに見つけたので、それらの場合に何が起こっているのかについてはまだ完全には明らかではありません.

于 2011-02-04T06:41:20.250 に答える