HMAC是计算MAC的一种方法,有密钥参与计算,不采用HASH算法,对数据做hash计算,并用密钥加密,计算出MAC数值;
void HMAC_CTX_init(HMAC_CTX *ctx);
初始化ctx,在计算MAC之前必须调用此函数;
void HMAC_CTX_cleanup(HMAC_CTX *ctx);
将ctx中密钥数据及其他相关数据清楚,如果不再计算ctx,需要调用此函数,将ctx中数据清除;
int HMAC_Init(HMAC_CTX *ctx, const void *key, int len,
const EVP_MD *md); /* deprecated */
初始化ctx数据,在ctx中复制EVP_MD方法,密钥数据,密钥数据长度为len;此函数在0.96版本之后不再被支持。
int HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len,
const EVP_MD *md, ENGINE *impl);
初始ctx数据,在ctx中复制EVP_MD方法,密钥数据,密钥数据长度为len, impl可以为NULL;
int HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, size_t len);
此函数可以被重复调用,将数据块加入到计算结果中,数据缓冲区data,数据长度为len;
int HMAC_Final(HMAC_CTX *ctx, unsigned char *md, unsigned int *len);
计算出的MAC数据放置在md中,用户需要保证md数据有足够长的空间,长度为len;
unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len,
const unsigned char *d, size_t n, unsigned char *md,
unsigned int *md_len);
直接计算MAC数据,通过evp_md,密钥,密钥数据长度len,计算的数据保存在d,长度为n,计算结果保存在md中,长度md_len;
int HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx);
复制ctx;
dctx: 目标ctx;
sctx:源ctx;
void HMAC_CTX_set_flags(HMAC_CTX *ctx, unsigned long flags);
HMAC是计算MAC的一种方法,有密钥参与计算,不采用HASH算法,对数据做hash计算,并用密钥加密,计算出MAC数值;void HMAC_CTX_init(HMAC_CTX *ctx);初始化ctx,在计算MAC之前必须调用此函数;void HMAC_CTX_cleanup(HMAC_CTX *ctx);将ctx中密钥数据及其他相关数据清楚,如果不再计算ctx,
C模块包含一个用于
OpenSSL
的PBKDF2实现的包装器,以及一个简单的盐生成器。
PKCS#5中定义的PBKDF2(基于密码的密钥派生功能#2)是一种从密码派生随机值的
算法
。
该
算法
将伪随机函数(在这种情况下为SHA256
HMAC
)与盐字符串一起应用于密码,并重复多次此过程以创建派生密钥(即哈希)。 派生的密钥可以与纯文本盐字符串一起存储到例如密码文件或数据库表中。
将盐与密码一起使用会降低使用彩虹表破解哈希的能力。 迭代次数的增加使使用蛮力方法更难破解密码,但同时也减慢了密钥派生的速度。
更多信息:
有关示例程序,请参见test.c
基本上,函数hash_password返回可以存储到持久性存储中的摘要字符串。 字符串的格式为
[salt] + SEPARATOR + [digest]
其中[digest]是pb
HMAC
_CTX hctx;
HMAC
_CTX_init(&hctx);
HMAC
_Init_ex(&hctx, mac_key, sizeof(mac_key), EVP_sha1(),
NULL
);
HMAC
_Update(&hctx, pTemp + offset, DEFAULT_PAGESIZE - reserve - offset + IV_SIZE);
HMAC
_Update(&hctx, (const unsigned char)&
#include "
hmac
/
hmac
.h"
void
hmac
_sha1(const uint8_t *k, /* secret key */
size_t lk, /* length of the key in bytes */
const uint8_t *d, /* data */
size_t ld, /* length of data in bytes */
uint8_t *out, /* output buffer, at least "t" bytes */
size_t *t);
openssl
-libs-1.1.1m是一个开源的
加密
库,用于编写SSL和TLS协议的安全连接。它实现了最新版本的TLS协议1.3,提供了更加安全和高效的
加密
算法
。
它包含了多种密码套件,可用于在不同的平台和环境中进行
加密
和解密。
openssl
-libs-1.1.1m还提供了多种协议、密钥交换
算法
和数字签名
算法
等功能,以供开发者进行自定义配置和实现。
此外,
openssl
-libs-1.1.1m也可以用于开发安全的网络应用程序,如网站、电子邮件客户端等等。它提供了API,以便开发人员可以利用
加密
和安全通信在网络中传输数据。
总之,
openssl
-libs-1.1.1m在网络安全中发挥了重要的作用,保障了网络传输的安全性和私密性。它是开放源代码的,可以免费使用,在开发安全网络应用程序时是必不可少的一项工具。
Openssl AES
angry_fish:
no OPENSSL_Applink 的错误
super0xie: