博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux下C语言使用openssl库进行加密
阅读量:4627 次
发布时间:2019-06-09

本文共 3747 字,大约阅读时间需要 12 分钟。

  在这里插一小节加密的吧,使用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

  编译选项为: 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

  运行得到结果后,我们可以使用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];//注意这里的字符个数为20 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("请输入文件名,用于计算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

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

  

  

转载于:https://www.cnblogs.com/wunaozai/p/3887009.html

你可能感兴趣的文章
2018.09.27 bzoj3029: 守卫者的挑战(概率dp)
查看>>
winXP启用SSL方式IIS
查看>>
java类路径classpath和包
查看>>
Oracler读取各种格式的相关日期格式
查看>>
Python学习札记(三十六) 面向对象编程 Object Oriented Program 7 __slots__
查看>>
iOS 时间和时间戳之间转化
查看>>
【整理】C#文件操作大全(SamWang)
查看>>
如何从数据库生成 EF Code First model
查看>>
2013年3月4号
查看>>
QT Creator 快速入门教程 读书笔记(一)
查看>>
CNN之yolo目标检测算法复习总结
查看>>
Windows系统架构
查看>>
PCA的数学原理
查看>>
Flask Web Development —— Web表单(上)
查看>>
Struts2标签
查看>>
PHP知识结构
查看>>
extjs grid renderer用法
查看>>
PAT Basic 1072
查看>>
作业分析,Karger最小割:(python)Engineering: Algorithms1 - SELF PACED Algorithms: Design and Analysis...
查看>>
[JS-JQuery]基础
查看>>