日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

单片机c语言 openssl,Linux下C语言使用openssl库进行加密

發(fā)布時(shí)間:2024/10/8 linux 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单片机c语言 openssl,Linux下C语言使用openssl库进行加密 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在這里插一小節(jié)加密的吧,使用openssl庫(kù)進(jìn)行加密。

使用MD5加密

我們以一個(gè)字符串為例,新建一個(gè)文件filename.txt,在文件內(nèi)寫入hello ,然后在Linux下可以使用命令md5sum filename.txt計(jì)算md5值 ==>?b1946ac92492d2347c6235b4d2611184 ?。雖然寫入的是hello這5個(gè)字符,但是我們使用命令xxd filename.txt后可以看出文件結(jié)尾處會(huì)有個(gè)0x0a這個(gè)回車符。所以在下面的代碼中才會(huì)有\(zhòng)n。

1 //打開(kāi)/usr/include/openssl/md5.h這個(gè)文件我們可以看到一些函數(shù)2 //初始化 MD5 Contex, 成功返回1,失敗返回0

3 int MD5_Init(MD5_CTX *c);

4 //循環(huán)調(diào)用此函數(shù),可以將不同的數(shù)據(jù)加在一起計(jì)算MD5,成功返回1,失敗返回0

5 int MD5_Update(MD5_CTX *c, const void *data, size_t len);

6 //輸出MD5結(jié)果數(shù)據(jù),成功返回1,失敗返回0

7 int MD5_Final(unsigned char *md, MD5_CTX *c);

8 //MD5_Init,MD5_Update,MD5_Final三個(gè)函數(shù)的組合,直接計(jì)算出MD5的值

9 unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md);

10 //內(nèi)部函數(shù),不需要調(diào)用

11 void MD5_Transform(MD5_CTX *c, const unsigned char *b);

新建一個(gè)cpp文件用于計(jì)算MD5值

1 #include

2 #include

3 #include

4

5 int main()

6 {

7 MD5_CTX ctx;

8 unsigned char outmd[16];

9 int i=0;

10

11 memset(outmd,0,sizeof(outmd));

12 MD5_Init(&ctx);

13 MD5_Update(&ctx,"hel",3);

14 MD5_Update(&ctx,"lo\n",3);

15 MD5_Final(outmd,&ctx);

16 for(i=0;i<16;i

17 {

18 printf("%02X",outmd[i]);

19 }

20 printf("\n");

21 return 0;

22 }

編譯選項(xiàng)為: g++ MD5test.cpp -lssl -o MD5test

運(yùn)行后的結(jié)果為:?B1946AC92492D2347C6235B4D2611184

注意這里用到openssl庫(kù),可以運(yùn)行 yum install openssl ?和 yum install openssl-devel 進(jìn)行安裝。

下面這個(gè)代碼是對(duì)文件進(jìn)行MD5計(jì)算。

1 #include

2 #include

3 #include

4

5 int main()

6 {

7 MD5_CTX ctx;

8 unsigned char outmd[16];

9 char buffer[1024];

10 char filename[32];

11 int len=0;

12 int i;

13 FILE * fp=NULL;

14 memset(outmd,0,sizeof(outmd));

15 memset(filename,0,sizeof(filename));

16 memset(buffer,0,sizeof(buffer));

17 printf("請(qǐng)輸入文件名,用于計(jì)算MD5值:");

18 scanf("%s",filename);

19 fp=fopen(filename,"rb");

20 if(fp==NULL)

21 {

22 printf("Can't open file\n");

23 return 0;

24 }

25

26 MD5_Init(&ctx);

27 while((len=fread(buffer,1,1024,fp))>0)

28 {

29 MD5_Update(&ctx,buffer,len);

30 memset(buffer,0,sizeof(buffer));

31 }

32 MD5_Final(outmd,&ctx);

33

34 for(i=0;i<16;i

35 {

36 printf("%02X",outmd[i]);

37 }

38 printf("\n");

39 return 0;

40 }

運(yùn)行得到結(jié)果后,我們可以使用md5sum命令進(jìn)行驗(yàn)證。

使用SHA1加密

openssl里幾個(gè)函數(shù)講解

1 //SHA1算法是對(duì)MD5算法的升級(jí),計(jì)算結(jié)果為20字節(jié)(160位),使用方法如下:2 //打開(kāi)/usr/include/openssl/sha.h這個(gè)文件我們可以看到一些函數(shù)3 //初始化 SHA Contex, 成功返回1,失敗返回0

4 int SHA_Init(SHA_CTX *c);

5 //循環(huán)調(diào)用此函數(shù),可以將不同的數(shù)據(jù)加在一起計(jì)算SHA1,成功返回1,失敗返回0

6 int SHA_Update(SHA_CTX *c, const void *data, size_t len);

7 //輸出SHA1結(jié)果數(shù)據(jù),成功返回1,失敗返回0

8 int SHA_Final(unsigned char *md, SHA_CTX *c);

9 //SHA_Init,SHA_Update,SHA_Final三個(gè)函數(shù)的組合,直接計(jì)算出SHA1的值

10 unsigned char *SHA(const unsigned char *d, size_t n, unsigned char *md);

11 //內(nèi)部函數(shù),不需要調(diào)用

12 void SHA_Transform(SHA_CTX *c, const unsigned char *data);

13

14 //上面的SHA可以改為SHA1,SHA224,SHA256,SHA384,SHA512就可以實(shí)現(xiàn)多種加密了

我們對(duì)上面的程序進(jìn)行修改

1 #include

2 #include

3 #include

4

5 int main()

6 {

7 SHA_CTX stx;

8 unsigned char outmd[20];//注意這里的字符個(gè)數(shù)為209 char buffer[1024];

10 char filename[32];

11 int len=0;

12 int i;

13 FILE * fp=NULL;

14 memset(outmd,0,sizeof(outmd));

15 memset(filename,0,sizeof(filename));

16 memset(buffer,0,sizeof(buffer));

17 printf("請(qǐng)輸入文件名,用于計(jì)算SHA1值:");

18 scanf("%s",filename);

19 fp=fopen(filename,"rb");

20 if(fp==NULL)

21 {

22 printf("Can't open file\n");

23 return 0;

24 }

25

26 SHA1_Init(&stx);

27 while((len=fread(buffer,1,1024,fp))>0)

28 {

29 SHA1_Update(&stx,buffer,len);

30 memset(buffer,0,sizeof(buffer));

31 }

32 SHA1_Final(outmd,&stx);

33

34 for(i=0;i<20;i

35 {

36 printf("%02X",outmd[i]);

37 }

38 printf("\n");

39 return 0;

40 }

MD5有128bit(16個(gè)char)*SHA1有160bit(20個(gè)char)*SHA256有256bit(32個(gè)char)*SHA244有244bit(28個(gè)char)*SHA512有512bit(64個(gè)char).所以要注意修改大小哦:-O

總結(jié)

以上是生活随笔為你收集整理的单片机c语言 openssl,Linux下C语言使用openssl库进行加密的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。