2012-03-01 6 views
0

"앞으로 1 시간 내에"미래의 모든 해시와 일치하는 해시 문자열을 계산해야합니다.시간 간격을 해시하는 방법은 무엇입니까?

내가 잘못했다 :

now = datetime.now() 
hash = now.strftime("%D %H") 

을하지만 말 4시 55분에서 오전 그래서 만약 그 단순히 "시간이"최대 인 5 분 이내에, 분을 자릅니다.

해시 문자열의 소비자가 해시가 지난 1 시간 이내에 계산되었는지 알아야하기 때문에 지난 시간이 해싱의 일부가되어야합니다.

+1

왜 해시 문자열이어야합니까? 왜'datetime' 객체를 저장하고 그것을 비교하지 않을까요? – katrielalex

+0

나는 당신이 좋아할 것 같아요 [이 다른 질문] (http://stackoverflow.com/questions/9043172/hash-a-range-of-values) – inspectorG4dget

+0

@ katrielalex, 나는 그것이 건설 된 경우에만 유효 토큰을 가지고 지난 1 시간 내에 토큰과 함께 datetime 개체를 제공하면 공격자가 해싱 알고리즘을 더 쉽게 파악할 수 있습니다. – TheOne

답변

0

mgibsonbr의 제안과 비슷한 간단하고 근사한 해결책은 현재 시간으로 새 토큰을 생성 한 다음 실패한 경우 지난 시간으로 다시 확인하는 것입니다.

1

나는 그럴 가능성이 전혀 없다고 생각합니다. 예를 들어 값 X, Y, Z가 4시 15 분, 4시 55 분, 5시 30 분인 해시를 사용합니다. 4:55는 4:55와 5:30의 지난 시간 내에 있으므로 Y는 Z와 같아야합니다. 그러나 4:15의 과거 시간은 4:55가 아니라 5시 30 분이므로 X는 Y와 같아야하고 Z와 달라야합니다.

해시를 피하고 katrielalex를 제안하면 datetime (또는 timedelta)를 사용하여 수표에 사용합니다.

업데이트 : 난 당신이, 당신이 우리가 사람처럼, 더 나은 당신을 도울 수있는 요구 사항의 자세한 내용을 제공 어쩌면 경우 ...없는 빠른 액세스를 위해 해시 테이블에 물건을 저장, 암호화에 대한 해시를 원하는 misundestood 보인다

많은 시간 (분)이 많지 않으므로 원칙적으로 처음 시간을 해싱 할 수 있습니다 (가장 가까운 분으로 잘림)./second), 해시가 여전히 유효한지 확인하려면 현재 시간을 가져 와서 매분/초의 해시를 확인하십시오. 순진한 해결책이지만 뭔가 더 좋은 출발점이 될 수 있습니다.

관련 문제