FFMPEG学习【libavutil】:Crypto and Hashing(二)

一、CAST5、

一)、函数

struct AVCAST5 *  av_cast5_alloc (void)

分配AVCAST5上下文要释放结构体:av_free(ptr)


int  av_cast5_init (struct AVCAST5 *ctx, const uint8_t *key, int key_bits)
初始化AVCAST5上下文。

参数:ctx:AVCAST5上下文

    key:一个5,6,... 16字节的密钥用于加密/解密

    key_bits:密钥数:可能是40,48,...,128

返回:0成功,故障时小于0


void  av_cast5_crypt (struct AVCAST5 *ctxuint8_t *dst, const uint8_t *srcint countint decrypt)
使用以前初始化的上下文,仅ECB模式加密或解密缓冲区。

参数:ctx:AVCAST5上下文

    dst:目标数组,可以等于src

    src:源数组,可以等于dst

    count:8字节块数

    decrypt:0加密,1解密


void  av_cast5_crypt2 (struct AVCAST5 *ctxuint8_t *dst, const uint8_t *srcint countuint8_t *iv, int decrypt)
使用先前初始化的上下文加密或解密缓冲区。

参数:ctx:AVCAST5上下文

    dst:目标数组,可以等于src

    src:源数组,可以等于dst

    count:8字节块数

    iv:CBC模式的初始化向量,ECB模式为NULL

    decrypt:0加密,1解密




二)、变量

const int  av_cast5_size



二、DES

一)、数据结构

struct   AVDES{
uint64_t round_keys [3] [16];
int triple_des;
}


二)、函数

AVDES *  av_des_alloc (void)
分配AVDES上下文。


int  av_des_init (struct AVDES *d, const uint8_t *key, int key_bits, int decrypt)
初始化AVDES上下文。

参数:key_bits:必须是64或192

    decrypt:0加密/ CBC-MAC,1解密

返回:成功为零,否则为负值


void  av_des_crypt (struct AVDES *d, uint8_t *dst, const uint8_t *srcint countuint8_t *iv, int decrypt)
使用DES算法加密/解密。

参数:count:8字节块数

    dst:目标数组,可以等于src,必须是8字节对齐

    src:源数组,可以等于dst,必须是8字节对齐,可能是NULL

    iv:用于CBC模式的初始化向量,如果为NULL则ECB将被使用,必须是8字节对齐

   decrypt: 0加密,1解密



void  av_des_mac (struct AVDES *d, uint8_t *dst, const uint8_t *srcint count)
使用DES算法计算CBC-MAC。

参数:dst:目标数组,可以等于src,必须是8字节对齐

    count:8字节块数

    src:源数组,可以等于dst,必须是8字节对齐,可能是NULL



三、HMAC

一)、宏

enum   AVHMACType { 
  AV_HMAC_MD5AV_HMAC_SHA1AV_HMAC_SHA224AV_HMAC_SHA256
  AV_HMAC_SHA384 = 12, AV_HMAC_SHA512 
}

二)、函数

AVHMAC *  av_hmac_alloc (enum AVHMACType type)
分配AVHMAC上下文。

参数:type:用于HMAC的哈希函数。


void  av_hmac_free (AVHMAC *ctx)
释放AVHMAC上下文。

参数:ctx:用来释放的上下文,可能为NULL


void  av_hmac_init (AVHMAC *ctx, const uint8_t *key, unsigned int keylen)
使用身份验证密钥初始化AVHMAC上下文。

参数:ctx:HMAC上下文

    key:验证密钥

    keylen:密钥的长度,以字节为单位


void  av_hmac_update (AVHMAC *ctx, const uint8_t *data, unsigned int len)
与HMAC的哈希数据。

参数:ctx:HMAC上下文

    data:哈希的数据

    len:数据的长度(以字节为单位)


int  av_hmac_final (AVHMAC *ctxuint8_t *out, unsigned int outlen)
完成哈希和输出HMAC摘要。

参数:ctx:HMAC上下文

    out:将消息写入的输出缓冲区

    outlen:out缓冲区的长度,以字节为单位

返回:写出的字节数或负错误代码。


int  av_hmac_calc (AVHMAC *ctx, const uint8_t *data, unsigned int len, const uint8_t *key, unsigned int keylen, uint8_t *out, unsigned int outlen)
用一个键来排列一组数据。

参数:ctx:HMAC上下文

    data:哈希的数据

    len:数据的长度(以字节为单位)

    key:验证密钥

    keylen:密钥的长度,以字节为单位

    out:将消息写入的输出缓冲区

    outlen:out缓冲区的长度,以字节为单位

返回:写出的字节数或负错误代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值