对加密算法 AES-128-CBC 的一些理解

对加密算法 AES-128-CBC 的一些理解

简单说明

  • AES-128-CBC是一种分组对称加密算法,即用同一组key进行明文和密文的转换,以128bit为一组,128bit==16Byte,意思就是明文的16字节为一组对应加密后的16字节的密文。
  • 若最后剩余的明文不够16字节,需要进行填充,通常采用PKCS7进行填充。比如最后缺3个字节,则填充3个字节的0x03;若最后缺10个字节,则填充10个字节的0x0a;
  • 若明文正好是16个字节的整数倍,最后要再加入一个16字节0x10的组再进行加密

需要参数

  • 传入要加密的明文
  • 传入一个16字节的key
  • 传入一个16字节的初始偏移向量IV

CBC模式:


用初始向量和密钥加密第一组数据,然后把第一组数据加密后的密文重新赋值给IV,然后进行第二组加密,循环进行直到结束

使用openSSL命令测试

加密

// -e加密,-aes-128-cbc指定使用加密算法,-iv指定偏移向量为16进制,-K指定16进制密钥,-in指定要加密的文件,-out指定密文输出文件
// 初始IV为16个字节的0x00, 密钥为 abcdefghijklmnop
openssl enc -e -aes-128-cbc -iv 0000000000000000 -K 6162636465666768696a6b6c6d6e6f70 -in input -out output

也可以直接用管道指向hexdump命令进行密文打印

openssl enc -e -aes-128-cbc -iv 0000000000000000 -K 6162636465666768696a6b6c6d6e6f70 -in input | hexdump -C

解密

// -d解密
openssl enc -d -aes-128-cbc -iv 0000000000000000 -K 6162636465666768696a6b6c6d6e6f70 -in input -out output

注意:


每组加密过的密文都要重新赋给偏移向量,然后进行下一组的加密,所以可以用上一组的密文来充当偏移向量解密这一组的密文

你可能感兴趣的:(对加密算法 AES-128-CBC 的一些理解)