我需要從一個字符串的散列生成一個種子。這個種子將被用來生成隨機數,我可能會使用srandom(),但是這個函數並不是一個char緩衝區的參數,它需要一個整數。有沒有什麼方法可以使用char緩衝區來播種srandom,或者有什麼其他方法可以通過散列鍵生成int種子。希望你能幫助!用字符緩衝區播種srandom
1
A
回答
0
char *hashKey = "helloWorld!"; /* your Hash pointer */
int intHash = 0;
int hashCarry = 0;
for(int i = 0; hashKey[i] != '\0'; i++){
intHash ^= hashKey[i]; // XORing with current character
hashCarry = intHash & 0xF0000000; /* getting 4 bits - MSBs */
intHash <<= 4; // Multiplying it by 16
intHash += hashCarry >> 28; /* e.g 0xF0000000 becomes 0x0000000F */
}
srandom(intHash);
希望這有助於...
上面的代碼不會破壞你的任何HashKey位。
0
正在將一個字符串解析成你正在尋找的數字嗎?如果是的話,試試這個:
char buf[] = "12345678";
int number = strtol(buf, NULL, 10);
srand(number);
編輯:從您的評論:
我使用MD5哈希它
你想回到你散列值?那麼你錯過了哈希的基本概念。你不能從哈希中取回哈希值,這就是要點。
0
由於您目前沒有發佈任何代碼,因此我在這裏做了一些假設。
char *strHash = "ABCD1234"; // could be anything, i.e. "HelloWorld!"
int intNumberFromHash = 0;
for(int intCurrentCharacter = 0; strHash[intCurrentCharacter] != '\0'; intCurrentCharacter++){
intNumberFromHash <<= 8; // effectively multiply by 256
intNumberFromHash += strHash[intCurrentCharacter];
}
srandom(intNumberFromHash);
此代碼將從「字符串」生成一個「數字」。然而,它不是很聰明(即它會經常溢出,最後只有最後四個字符真的在做任何事情)。如果散列是一個十六進制值,你可能想要做這樣的事情。
sscanf(theHash,"%x",number);
srandom(number);
的%x
改性劑將與轉換小寫值(即 「ABCD1234」)十六進制值。 %X
將執行大寫十六進制(「ABCD1234」)。
0
你可以使用initstate(3),還是我錯過了什麼?
相關問題
- 1. 字節緩衝區,字符緩衝區,字符串和字符集
- 2. 字符串緩衝區 - OutOfMemoryError
- 3. 字符緩衝區比較
- 4. 生成*字符緩衝區
- 5. 字符緩衝區中的許多緩衝區
- 6. 刪除無符號字符*緩衝區
- 7. 字節緩衝區,字符串
- 8. 字節緩衝區爲字符串GWT
- 9. 緩衝區不會打印字符串
- 10. 預期字符串或緩衝區
- 11. 比較緩衝區與C字符串
- 12. 循環字符數組緩衝區 - c
- 13. 「預期字符串或緩衝區」
- 14. 在緩衝區中查找字符串
- 15. 升壓緩衝區麻煩字符串
- 16. 初始化字符緩衝區在C++
- 17. Java緩衝區到字符串數組
- 18. 的XMLType字符串緩衝區太小
- 19. 字符串緩衝區聲明不足
- 20. C#字符串數組緩衝區
- 21. 字符串緩衝區需要幫助
- 22. 從字符緩衝區x509(PKCS7)EVP_PKEY
- 23. 字符串緩衝區太小
- 24. 實現istream獲取字符緩衝區?
- 25. 緩衝區溢出字符解析
- 26. C++字符緩衝區指針錯誤
- 27. 字符串緩衝區太小錯誤
- 28. 包裝紙字符串緩衝區
- 29. 預期字符緩衝區對象
- 30. SAX字符緩衝區大小
什麼是散列值的類型? –
我正在使用MD5對它進行散列,輸出在char類型的緩衝區中返回 –
您是在強大的安全性之後,還是隻是一個快速的黑客? –