有谁知道在 C 中加盐和散列密码的库或框架?我将如何在程序中执行此操作?
问问题
8279 次
4 回答
7
我肯定会选择OpenSSL。请,当涉及到加密时,不要尝试自己动手,或者只是找到某人在 Internet 上发布的内容。使用诸如 OpenSSL 之类的东西,它每天都得到数百万人的验证和信任。在我看来,自制和不当实施的加密是互联网安全漏洞的主要原因。
正如 Tibor 所提到的,通常在散列之前将盐附加到密码中。独特的盐大大降低了基于彩虹表的攻击的能力。
于 2012-04-23T00:27:48.780 回答
5
我会建议使用 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);
于 2012-05-08T20:33:40.060 回答
2
C 中有许多散列函数实现,我建议在 C 中搜索 SHA1 算法。如果这是唯一的加密功能,您可以复制一些片段,否则您可以使用更高级的库,例如 OpenSSL 或 GNU Crypto。
另一方面,加盐通常只需将盐附加到密码即(在伪代码中)即可完成pwhash=hash(password+salt)
。
于 2012-04-23T00:28:49.870 回答