C中带有字符数组的Srand?
如何使用字符数组而不是C中的int进行随机种子设定?C中带有字符数组的Srand?,c,random,srand,random-seed,C,Random,Srand,Random Seed,如何使用字符数组而不是C中的int进行随机种子设定? 我想使用密码,而不是数字,但srand只接受整数。 有办法做到这一点吗?只需使用哈希函数即可。经典之作是hash_pjw unsigned hash_pjw (const void *str) { const char *s = str; unsigned int g, h = 1234567u; while (*s != 0) { h = (h << 4) + *s++; if ((g = h
我想使用密码,而不是数字,但
srand
只接受整数。有办法做到这一点吗?只需使用哈希函数即可。经典之作是hash_pjw
unsigned hash_pjw (const void *str)
{
const char *s = str;
unsigned int g, h = 1234567u;
while (*s != 0) {
h = (h << 4) + *s++;
if ((g = h & (unsigned int) 0xf0000000) != 0)
h = (h ^ (g >> 24)) ^ g;
}
return h;
}
unsigned hash_pjw(const void*str)
{
const char*s=str;
无符号整数g,h=1234567u;
而(*s!=0){
h=(h>24))^g;
}
返回h;
}
请注意,
rand()
与加密安全完全不同。一种方法是创建字符串的散列,并将结果整数用作种子。@cpluplusooaa然后再次阅读问题。这根本不是我要问的。@yentup对我来说,Edward的回答似乎是正确的,即使用哈希函数从密码中获取一个int,并将该int用作srand的种子(通常将该int传递给srand)。@Chnossos你知道最好的哈希函数吗?srand((未签名)strtoul(“alphanums”,NULL,36))是的,我知道。我正在对图像中像素的坐标进行置乱以进行隐写术。它是安全的,因为被隐藏的数据字节被分割成二进制,所以不可能知道如何在没有随机种子的情况下对数据重新排序。即使是非常少量的数据,您也可以将其重新排序为您想要的任何数据。因此,没有办法知道应该以何种方式重新排序。这听起来是对的吗?我猜其中的漏洞是暴力强制的密码长度。为了防止暴力强制,我可以将密码散列65536次或其他什么。好的,我想我还是应该加密数据。