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

一、AES

一)、函数

struct AVAES *  av_aes_alloc (void)
分配AVAES上下文。


int  av_aes_init (struct AVAES *a, const uint8_t *key, int key_bits, int decrypt)
初始化AVAES上下文。

参数:key_bits:128,192或256

    decrypt:0加密,1解密    


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

参数:count:16字节块数

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

     src:源数组,可以等于dst

     iv:CBC模式的初始化向量,如果NULL,则使用ECB

     decrypt::0加密,1解密 


二)、变量

const int  av_aes_size


二、Base64

一)、宏

#define  AV_BASE64_DECODE_SIZE(x)   ((x) * 3LL / 4)
计算以长度x解码到数据缓冲区的base64字符串所需的字节输出大小。


#define  AV_BASE64_SIZE(x)   (((x)+2) / 3 * 4 + 1)
计算base64编码x字节所需的输出大小为空终止字符串。


二)、函数

int  av_base64_decode (uint8_t *out, const char *inint out_size)
解码base64编码的字符串。

参数:out:缓冲区用于解码数据

    in: 以空值终止的输入字符串

    out_size:输出缓冲区的大小(以字节为单位)必须至少为in的长度的3/4,即AV_BASE64_DECODE_SIZE(strlen(in))

返回:写入的字节数,或者在输入无效的情况下为负值


char *  av_base64_encode (char *outint out_size, const uint8_t *inint in_size)
将数据编码到base64并进行空终止。

参数:out:编码数据的缓冲区

    out_size:输出缓冲区(包括空终止符)的字节大小必须至少为AV_BASE64_SIZE(in_size)

    in:输入缓冲区包含要编码的数据

    in_size:在缓冲区中以字节为单位的大小

返回:出错或出现错误时为NULL



三、Blowfish

一)、结构体

struct   AVBlowfish{

uint32_t  p [AV_BF_ROUNDS+2];

uint32_t  s [4][256]

}


二)、宏

#define  AV_BF_ROUNDS   16

三)、函数

AVBlowfish *  av_blowfish_alloc (void)
分配AVBlowfish上下文。


void  av_blowfish_init (struct AVBlowfish *ctx, const uint8_t *key, int key_len)
初始化AVBlowfish上下文。

参数:ctx:一个AVBlowfish上下文

    key:密匙

    key_len:密匙长度



void  av_blowfish_crypt_ecb (struct AVBlowfish *ctx, uint32_t *xl, uint32_t *xr, int decrypt)
使用先前初始化的上下文加密或解密缓冲区。

参数:ctx:一个AVBlowfish上下文

    xl:剩下四个字节一半的输入要加密

    xr:右侧四位半字节的输入要加密

    decrypt:0加密,1解密


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

参数:ctx:一个AVBlowfish上下文

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

    src:源数组,可以等于dst

    count:8字节块数

    iv:CBC模式的初始化向量,如果使用NULL ECB

    decrypt:0加密,1解密



四、CAMELLIA

一)、函数

struct AVCAMELLIA *  av_camellia_alloc (void)
分配AVCAMELLIA上下文要释放结构体:av_free(ptr)


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

参数:ctx:AVCAMELLIA上下文

    key:用于加密/解密的16,24,32字节的密钥

    key_bits:密钥数:可能是128,192,256


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

参数:ctx:AVCAMELLIA上下文

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

    src:源数组,可以等于dst

    count:16字节块的数量iv CBC模式的初始化向量,ECB模式为NULL

    decrypt:0加密,1解密


二)、变量

const int  av_camellia_size

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值