使用char缓冲区对srandom进行种子设定
我需要从字符串的散列生成一个种子。这个种子将被用来生成随机数,我可能会使用srandom,但是这个函数不接受一个字符缓冲区作为参数,它接受一个整数。是否有任何方法可以使用char缓冲区对srandom进行种子设定,或者有任何其他方法可以从散列键生成int种子。希望你能帮忙 将字符串解析为数字是您要查找的吗?如果是,请尝试以下方法:使用char缓冲区对srandom进行种子设定,c,hash,random,C,Hash,Random,我需要从字符串的散列生成一个种子。这个种子将被用来生成随机数,我可能会使用srandom,但是这个函数不接受一个字符缓冲区作为参数,它接受一个整数。是否有任何方法可以使用char缓冲区对srandom进行种子设定,或者有任何其他方法可以从散列键生成int种子。希望你能帮忙 将字符串解析为数字是您要查找的吗?如果是,请尝试以下方法: char buf[] = "12345678"; int number = strtol(buf, NULL, 10); srand(number); 编辑:根据您
char buf[] = "12345678";
int number = strtol(buf, NULL, 10);
srand(number);
编辑:根据您的评论:
我正在使用MD5来散列它
你想得到你散列的值吗?那么你就错过了散列的基本概念。你不能从散列中得到一个散列值,这就是问题所在。因为到目前为止你还没有发布任何代码,我在这里做一些假设
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);
%x修饰符将十六进制值转换为小写值,即abcd1234.%X将使用大写十六进制ABCD1234
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位。您可以使用initstate3,或者我遗漏了什么吗?哈希值的类型是什么?我正在使用MD5对其进行哈希,输出返回到char类型的缓冲区中。您是在使用强安全性,还是只是快速破解?我删除了我的答案,寻找更好的答案,但是我用的sscanf有什么问题吗?你正在用strtol做什么对不起,你能不能再详细解释一下?@Omkant sscanfbuffer,%d,number;将调用未定义的行为,因为scanf需要指向其输出参数的指针。strtol函数是字符串到整数转换的标准方式。好了,我应该用&number,谢谢。我想知道如何使用散列值作为随机函数的种子
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);