5

有谁知道在 C 中加盐和散列密码的库或框架?我将如何在程序中执行此操作?

4

4 回答 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 回答
2

最流行的具有散列函数的 C 加密库是OpenSSLBotan,如果您使用的是 C++ ,还有Crypto++。此外,根据您的目标平台和您要使用的散列函数,您可以在 Windows 上使用 Win32 加密函数以及用于不同平台的其他本机库。

于 2012-04-23T00:36:32.623 回答