對(duì)加密算法 AES-128-CBC 的一些理解

對(duì)加密算法 AES-128-CBC 的一些理解

簡(jiǎn)單說(shuō)明

  • AES-128-CBC是一種分組對(duì)稱(chēng)加密算法,即用同一組key進(jìn)行明文和密文的轉(zhuǎn)換,以128bit為一組,128bit==16Byte,意思就是明文的16字節(jié)為一組對(duì)應(yīng)加密后的16字節(jié)的密文。
  • 若最后剩余的明文不夠16字節(jié),需要進(jìn)行填充,通常采用PKCS7進(jìn)行填充。比如最后缺3個(gè)字節(jié),則填充3個(gè)字節(jié)的0x03;若最后缺10個(gè)字節(jié),則填充10個(gè)字節(jié)的0x0a;
  • 若明文正好是16個(gè)字節(jié)的整數(shù)倍,最后要再加入一個(gè)16字節(jié)0x10的組再進(jìn)行加密

需要參數(shù)

  • 傳入要加密的明文
  • 傳入一個(gè)16字節(jié)的key
  • 傳入一個(gè)16字節(jié)的初始偏移向量IV

CBC模式:


用初始向量和密鑰加密第一組數(shù)據(jù),然后把第一組數(shù)據(jù)加密后的密文重新賦值給IV,然后進(jìn)行第二組加密,循環(huán)進(jìn)行直到結(jié)束

使用openSSL命令測(cè)試

加密

// -e加密,-aes-128-cbc指定使用加密算法,-iv指定偏移向量為16進(jìn)制,-K指定16進(jìn)制密鑰,-in指定要加密的文件,-out指定密文輸出文件
// 初始IV為16個(gè)字節(jié)的0x00, 密鑰為 abcdefghijklmnop
openssl enc -e -aes-128-cbc -iv 0000000000000000 -K 6162636465666768696a6b6c6d6e6f70 -in input -out output

也可以直接用管道指向hexdump命令進(jìn)行密文打印

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

注意:


每組加密過(guò)的密文都要重新賦給偏移向量,然后進(jìn)行下一組的加密,所以可以用上一組的密文來(lái)充當(dāng)偏移向量解密這一組的密文

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容