库中的密码(盐/哈希)库?

问题描述 投票:5回答:4

没有人知道在C语言中添加密码并散列密码的库或框架吗?我将如何在程序中执行此操作?

c hash passwords
4个回答
7
投票

我肯定会选择OpenSSL。请注意,在进行加密时,请勿尝试自己动手做事,也不要仅仅找别人发布在互联网上的东西。使用经过验证的OpenSSL之类的东西,每天都有数百万人信任它。在我看来,自家酿制和未正确实施的加密是Internet上违反安全性的主要原因。

如Tibor所述,通常在散列之前在密码后添加盐。唯一的盐会大大降低基于彩虹表的攻击的能力。


3
投票

我建议使用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:盐只不过是一些随机字节,但要点是采用加密安全随机字节。为此,您可以使用:

# include <openssl/rand.h>

unsigned char salt[32];    //32 is just an example  
int RAND_bytes(salt,32);

2
投票

C中有许多哈希函数实现,建议在C中搜索SHA1算法。如果这是唯一的加密功能,则可以复制一些代码段,否则可以使用更高级的库,例如OpenSSL或GNU Crypto。

另一方面,通常仅通过将盐附加到密码(即(用伪代码)pwhash=hash(password+salt)来完成)。


2
投票

具有散列功能的最受欢迎的C加密库为OpenSSLBotan,如果您使用的是C ++,则为Crypto++。此外,根据目标平台和要使用的哈希函数,您可以在Windows上使用Win32加密函数,并在不同平台上使用其他本机库。

© www.soinside.com 2019 - 2024. All rights reserved.