[英]Library for passwords (salt/hash) in C?
有谁知道在 C 中加盐和散列密码的库或框架? 我将如何在程序中执行此操作?
我肯定会选择OpenSSL 。 请,当谈到加密时,不要尝试自己动手,或者只是找到有人发布在 Internet 上的东西。 使用像 OpenSSL 这样的东西,每天都有数百万人经过验证和信任。 在我看来,自制和不正确实施的加密是导致 Internet 安全漏洞的主要原因。
正如 Tibor 所提到的,通常在散列之前将盐附加到密码中。 独特的盐会大大降低基于彩虹表的攻击的能力。
我会建议使用 Openssl API
1.) 如果要使用密码生成密钥,请使用PKCS5_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.) SALT:salt 只不过是一些随机字节,但重点是采用加密安全的随机字节。 为此,您可以使用:
# 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)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.