2016-10-27 11 views
-1

私はshaを使って文字列をハッシュすることができる関数を作りたがっていました。 は、ここに私のコードです:私はこのコードをコンパイルするとパラメータを渡すことからのHexdigest

def hashNow(number,string): 
     for i in range (number): 
      hashH = int(hashlib.sha1(string.hexdigest(),16) 
      print hashH #debug purpose 
      indexing = hashH % len(arrays) 
      arrays[indexing] = 1 

、それはprint hashHSyntaxError: invalid syntaxポインティングを印刷します。私の経験に基づいて、無効な構文エラーは通常、前の行のエラーキャリアです。

私の質問:hexdigestを間違って実装していますか?なぜstring.hexdigest()が構文エラーを引き起こすのですか?

+0

'hashH = ..'行に') 'がありません。 –

+0

私はここで何をしようとしているのか分かりません。 'str'オブジェクトには' hexdigest'メソッドがありません。 16進ダイジェスト(整数として再びデコードする)を望まないならば、単に '.digest()'メソッドを使ってバイトを直接取得するのではないでしょうか? –

+0

'' hexlib.sha1() 'の結果に対して[' hexdigest() '](https://docs.python.org/2/library/hashlib.html#hashlib.hash.hexdigest)の呼び出しを行う必要があります: 'hashlib.sha1(文字列).hexdigest()' – xZise

答えて

0

構文エラーの1つは、int()コールの終了括弧が欠落していることです。別のエラーは、sha1()がintに変換できないオブジェクトを返すことです(私はPython 2.7でそれを試しています)。ちなみに、sha-1は本当に安全ではありませんが、sha-2とsha-3がより良いです。

+0

sha-1を使ったのは、hashlibオプションで利用できるもので、md5よりも優れていると聞きました。私が間違っている? – ThomasWest

+0

他のハッシュ関数がサポートされていない場合はsha-1を使用するのが妥当です – Aemyl

関連する問題