詳解SM4算法源碼接口
SM4算法是我們自己國家的一個(gè)分組密碼算法。該算法的分組長度為128 比特,密鑰長度為128 比特。加密算法與密鑰擴(kuò)展算法都采用32 輪非線性迭代結(jié)構(gòu)。解密算法與加密算法的結(jié)構(gòu)相同,只是輪密鑰的使用順序相反,解密輪密鑰是加密輪密鑰的逆序。
什么是分組密碼算法:
分組密碼算法:國際DES、國產(chǎn)SM4
分組密碼就是將明文數(shù)據(jù)按固定長度進(jìn)行分組,然后在同一密鑰控制下逐組進(jìn)行加密,從而將各個(gè)明文分組變換成一個(gè)等長的密文分組的密碼。其中二進(jìn)制明文分組的長度稱為該分組密碼的分組規(guī)模。
SM4算法的整體結(jié)構(gòu)圖如下:
在SM4算法的源代碼中存在如下幾個(gè)函數(shù):

還有一個(gè)非常重要的結(jié)構(gòu)體:

結(jié)構(gòu)體:
sm4_context結(jié)構(gòu)體中的Mode控制是加密還是解密,sk則表示子密鑰,也稱作輪密鑰。
第一個(gè)函數(shù): void sm4_setkey_enc(sm4_context *ctx,unsigned char key[16])
這個(gè)函數(shù)是用來設(shè)置加密密鑰的,一個(gè)參數(shù)分別為sm4_context *ctx和一個(gè)key。
其內(nèi)部會(huì)調(diào)用static void sm4_setkey( unsigned long SK[32], unsigned char key[16] )函數(shù)
這個(gè)函數(shù)是用來設(shè)置密鑰的,這個(gè)函數(shù)內(nèi)部會(huì)對(duì)當(dāng)前傳入的主密鑰進(jìn)行32輪的迭代,每次迭代的輪密鑰都被存放到ctx結(jié)構(gòu)中的sk數(shù)組中。
void sm4_setkey_dec(sm4_context *ctx,unsigned char key[16])函數(shù)就是解密函數(shù),過程為上述過程的逆序過程。
第二個(gè)函數(shù):void sm4_crypt_ecb( sm4_context *ctx,int mode,int length, unsigned char
這個(gè)函數(shù)的作用是使用ecb模式(ECB(Electronic Codebook,電碼本)模式是分組密碼的一種最基本的工作模式。同樣,sm4_crypt_cbc函數(shù)則是使用的CBC模式,也就是分組鏈接模式)來對(duì)內(nèi)容進(jìn)行加密,內(nèi)部也是一個(gè)循環(huán),根據(jù)length的長度來進(jìn)行循環(huán),每次循環(huán)都調(diào)用sm4_one_round進(jìn)行加密或者解密,到底是加密還是解密,主要是根據(jù)第二個(gè)參數(shù)Mode來進(jìn)行決定。
以上就是整個(gè)SM4算法的函數(shù)簡(jiǎn)介,運(yùn)用這些函數(shù)接口,我們不需要知道內(nèi)部的具體實(shí)現(xiàn),就可以使用SM4加密算法來對(duì)我們的數(shù)據(jù)進(jìn)行加解密,十分的方便。










