2016-10-27 3 views
-1

sha를 사용하여 문자열을 해쉬 할 수있는 함수를 만들고 싶었습니다. 이 코드를 컴파일 할 때Hexdigest from passing parameter

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 hashH에서 SyntaxError: 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

구문 오류 중 하나는 int() 호출의 닫는 대괄호가 누락되었습니다. 또 다른 오류는 sha1()이 int로 변환 할 수없는 객체를 반환한다는 것입니다 (파이썬 2.7에서이 객체를 사용하려고합니다). 그건 그렇고, sha-1은 실제로 안전하지 않습니다. sha-2와 sha-3가 더 좋습니다.

+0

sha-1은 hashlib 옵션에서 사용할 수 있고 md5보다 낫다고 들었 기 때문에 sha-1을 사용했습니다. 내가 잘못? – ThomasWest

+0

다른 해시 함수가 지원되지 않는 경우 sha-1을 사용하는 것이 합리적입니다. – Aemyl