2014-04-17 11 views
1

이의 내가 있다고 가정 해 봅시다 종자 수있는이 키 내가 time()과 키와 함께 C++로 srand()를 사용하여 종자 어떻게어떻게 시간부터 srand(), 키 (문자열)

string key = "WID%ij38(@$151#3da==" 

?

키가 문자열이기 때문에 srand(time(NULL)*key))을 수행 할 수 없습니다.

어쨌든 변환 하시겠습니까?

+0

'key'문자열 길이를 시도 할 수 있습니다. – Himanshu

답변

2

당신은 문자열

srand(std::hash<std::string>{}(key));

+0

글쎄, 질문은'time (NULL)'과 결합해야한다. XOR이 최선의 방법 일 것이다. 더 까다로운 비트에 대한 좋은 해결책은 +1. 예를 들어, Visual C++의 라이브러리는 문자열을 따라 10 문자 만 쌓아서 보았습니다 (긴 문자열에 대해 예측 가능하고 빠른 성능을 제공하지만 잠재적으로 중요한 비용을 제공하는 것처럼 보입니다. 충돌). 암호화 해시는 훨씬 더 무작위입니다. –

2

엄격하므로, the argument to srand must be an unsigned int에게 해싱 시도 할 수 있습니다. 이제 캐릭터 문자열을 가져와 unsigined int을 제공하는 해시를 만들고 그로부터 작업 할 수 있습니다.

물론 보안상의 이유로 엔트로피를 늘리려는 경우, 특히 문자열이 고정되어 있거나 어떤 식 으로든 사용자로부터 오는 경우 엔 실망 할 수 있습니다.