gpt4 book ai didi

c++ - 如何在 Windows 上将 bcrypt_gensalt 与/dev/urandom 一起使用?

转载 作者:太空宇宙 更新时间:2023-11-04 12:45:43 24 4
gpt4 key购买 nike

我使用这个 BCrypt 库生成了一个带盐的散列:https://github.com/rg3/libbcrypt

问题出在 bcrypt.c (int bcrypt_gensalt) 中。 open("/dev/urandom", O_RDONLY) 在 Windows 上不起作用。我尝试了以下方法:

int bcrypt_gensalt(int factor, char salt[BCRYPT_HASHSIZE]) {
int fd;
unsigned char input[RANDBYTES];
int workf;
char *aux;

HCRYPTPROV hCryptProv;

if (CryptAcquireContext(
&hCryptProv,
NULL,
(LPCSTR)"Microsoft Base Cryptographic Provider v1.0",
PROV_RSA_FULL,
CRYPT_VERIFYCONTEXT)) {
if (CryptGenRandom(
hCryptProv,
RANDBYTES,
input)) {

if (CryptReleaseContext(hCryptProv, 0)) {
return 0;
}
else {
printf("Error during CryptReleaseContext.\n");
return 4;
}
}
else {
if (CryptReleaseContext(hCryptProv, 0)) {
printf("Error during CryptGenRandom.\n");
return 2;
}
else {
printf("Error during CryptReleaseContext.\n");
return 3;
}
}
}
else {
printf("Error during CryptAcquireContext!\n");
return 1;
}

/* Generate salt. */
workf = (factor < 4 || factor > 31)?12:factor;
aux = crypt_gensalt_rn("$2a$", workf, input, RANDBYTES,
salt, BCRYPT_HASHSIZE);
return (aux == NULL)?5:0;
}

但结果是:

Generated salt:
Hashed password: *0
Time taken: 0.000000 seconds
First hash check: OK
Second hash check: OK
First hash check with bcrypt_checkpw: OK
Time taken: 0.060000 seconds
Second hash check with bcrypt_checkpw: OK
Time taken: 0.060000 seconds

盐将无法正确生成。

最佳答案

在您的电话中:

aux = crypt_gensalt_rn("$2a$", workf, input, RANDBYTES,
salt, BCRYPT_HASHSIZE);

RANDBYTESBCRYPT_HASHSIZE 的值需要多一个字节来终止 \0

您是否尝试过(使用 RANDBYTES-1BCRYPT_HASHSIZE-1)?

关于c++ - 如何在 Windows 上将 bcrypt_gensalt 与/dev/urandom 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51748439/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com