有没有人知道在C语言中用于对密码进行盐值哈希的库或框架?我该如何在程序中实现这个功能?
evp.h
中的 PKCS5_PBKDF2_HMAC_SHA1()
函数。 - cafPKCS5_PBKDF2_HMAC_SHA1()
,例如:# include <openssl/evp.h>
int PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen,
unsigned char *salt, int saltlen, int iter,
int keylen, unsigned char *out);
或者
int EVP_BytesToKey(const EVP_CIPHER *type,const EVP_MD *md,
const unsigned char *salt,
const unsigned char *data, int datal, int count,
unsigned char *key,unsigned char *iv);
2.) 为了哈希密码,使用sha256而不是sha1(原因是更安全,已经对sha1安全性进行了尝试)
# include <openssl/sha.h>
SHA256_CTX context;
unsigned char md[SHA256_DIGEST_LENGTH];
SHA256_Init(&context);
SHA256_Update(&context, (unsigned char*)input, length);
SHA256_Final(md, &context);
所以,之后md将包含密码哈希值
3.) 盐值:盐值只是一些随机字节,但重点是采用加密安全的随机字节。为此,您可以使用:
# include <openssl/rand.h>
unsigned char salt[32]; //32 is just an example
int RAND_bytes(salt,32);
在C语言中有许多哈希函数实现,我建议搜索C语言中的SHA1算法。如果这是唯一的加密功能,您可以复制一些代码片段,但否则您可以选择更高级的库,如OpenSSL或GNU Crypto。
另一方面,盐值通常只需将盐值附加到密码后即可进行,例如(伪代码)pwhash = hash(password + salt)
。