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

在这里插一小节加密的吧,使用openssl库进行加密。

使用MD5加密

我们以一个字符串为例,新建一个文件filename.txt,在文件内写入hello ,然后在Linux下可以使用命令md5sum filename.txt计算md5值 ==> b1946ac92492d2347c6235b4d2611184  。虽然写入的是hello这5个字符,但是我们使用命令xxd filename.txt后可以看出文件结尾处会有个0x0a这个回车符。所以在下面的代码中才会有\n。

1 //打开/usr/include/openssl/md5.h这个文件我们可以看到一些函数2 //初始化 MD5 Contex, 成功返回1,失败返回0

3 int MD5_Init(MD5_CTX *c);

4 //循环调用此函数,可以将不同的数据加在一起计算MD5,成功返回1,失败返回0

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

6 //输出MD5结果数据,成功返回1,失败返回0

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

8 //MD5_Init,MD5_Update,MD5_Final三个函数的组合,直接计算出MD5的值

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

10 //内部函数,不需要调用

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

新建一个cpp文件用于计算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 }

编译选项为: g++ MD5test.cpp -lssl -o MD5test

运行后的结果为: B1946AC92492D2347C6235B4D2611184

注意这里用到openssl库,可以运行 yum install openssl  和 yum install openssl-devel 进行安装。

下面这个代码是对文件进行MD5计算。

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("请输入文件名,用于计算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 }

运行得到结果后,我们可以使用md5sum命令进行验证。

使用SHA1加密

openssl里几个函数讲解

1 //SHA1算法是对MD5算法的升级,计算结果为20字节(160位),使用方法如下:2 //打开/usr/include/openssl/sha.h这个文件我们可以看到一些函数3 //初始化 SHA Contex, 成功返回1,失败返回0

4 int SHA_Init(SHA_CTX *c);

5 //循环调用此函数,可以将不同的数据加在一起计算SHA1,成功返回1,失败返回0

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

7 //输出SHA1结果数据,成功返回1,失败返回0

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

9 //SHA_Init,SHA_Update,SHA_Final三个函数的组合,直接计算出SHA1的值

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

11 //内部函数,不需要调用

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

13

14 //上面的SHA可以改为SHA1,SHA224,SHA256,SHA384,SHA512就可以实现多种加密了

我们对上面的程序进行修改

1 #include

2 #include

3 #include

4

5 int main()

6 {

7 SHA_CTX stx;

8 unsigned char outmd[20];//注意这里的字符个数为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("请输入文件名,用于计算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个char)*SHA1有160bit(20个char)*SHA256有256bit(32个char)*SHA244有244bit(28个char)*SHA512有512bit(64个char).所以要注意修改大小哦:-O

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值