MD5(摘要算法)是一種常用的加密算法,它將任意長(zhǎng)度的明文數(shù)據(jù)經(jīng)過(guò)處理后輸出固定長(zhǎng)度的密文。在C語(yǔ)言中,有現(xiàn)成的庫(kù)可以用來(lái)實(shí)現(xiàn)MD5加密,一般使用的庫(kù)是openssl。下面我們講解一下如何使用C語(yǔ)言中的openssl庫(kù)對(duì)JSON數(shù)據(jù)進(jìn)行MD5加密。
#include#include #include #include "json-c/json.h" int main(int argc, char const *argv[]) { unsigned char c[MD5_DIGEST_LENGTH]; int i; MD5_CTX mdContext; char *jsonData = "{\"name\": \"Tom\", \"age\": 18, \"gender\": \"male\"}"; /*解析JSON數(shù)據(jù)*/ struct json_object *jsonObj; jsonObj = json_tokener_parse(jsonData); /*構(gòu)建要加密的明文數(shù)據(jù)*/ char jsonString[1024]; sprintf(jsonString, "%s", json_object_to_json_string(jsonObj)); /*計(jì)算MD5值*/ MD5_Init(&mdContext); MD5_Update(&mdContext, jsonString, strlen(jsonString)); MD5_Final(c, &mdContext); /*將加密結(jié)果以十六進(jìn)制的形式輸出*/ for(i = 0; i< MD5_DIGEST_LENGTH; i++) printf("%02x", c[i]); printf("\n"); return 0; }
上述代碼中,我們用字符串的形式存儲(chǔ)JSON數(shù)據(jù),通過(guò)json_tokener_parse函數(shù)將字符串解析成一個(gè)json_object對(duì)象。然后,使用json_object_to_json_string函數(shù)將json_object對(duì)象轉(zhuǎn)換成字符串形式,用于進(jìn)行MD5加密。最后調(diào)用openssl庫(kù)中的MD5函數(shù),計(jì)算出密文。整個(gè)過(guò)程比較簡(jiǎn)單。