Linux下C语言使用openssl库加密算法SHA1
程序员文章站
2022-07-12 22:42:45
...
//SHA1算法是对MD5算法的升级,计算结果为20字节(160位),使用方法如下:
//打开/usr/include/openssl/sha.h这个文件我们可以看到一些函数
// 初始化 SHA Contex, 成功返回1,失败返回0
int SHA_Init(SHA_CTX *c);
// 循环调用此函数,可以将不同的数据加在一起计算SHA1,成功返回1,失败返回0
int SHA_Update(SHA_CTX *c, const void *data, size_t len);
// 输出SHA1结果数据,成功返回1,失败返回0
int SHA_Final(unsigned char *md, SHA_CTX *c);
// SHA_Init,SHA_Update,SHA_Final三个函数的组合,直接计算出SHA1的值
unsigned char *SHA(const unsigned char *d, size_t n, unsigned char *md);
// 内部函数,不需要调用
void SHA_Transform(SHA_CTX *c, const unsigned char *data);
//上面的SHA可以改为SHA1,SHA224,SHA256,SHA384,SHA512就可以实现多种加密了
SHA1加密同MD5加密,是一种不可逆的加密,是MD5的加强版
同样使用文件内容加密,文件名:hello,文件内容:hello
#include<openssl/sha.h>
#include<string.h>
#include<stdio.h>
int main(int argc,char *argv[])
{
SHA_CTX ctx;
unsigned char output[20];
char buffer[1024];
char filename[32];
int len=0;
int i;
FILE *fp=NULL;
memset(output,0,sizeof(output));
memset(filename,0,sizeof(filename));
memset(buffer,0,sizeof(buffer));
printf("Enter the file name:\n");
scanf("%s",filename);
fp=fopen(filename,"rb");
if(fp==NULL)
{
printf("open %s error\n",filename);
return -1;
}
SHA1_Init(&ctx);
while((len=fread(buffer,1,1024,fp))>0)
{
MD5_Update(&ctx,buffer,len);
memset(buffer,0,sizeof(buffer));
}
SHA1_Final(output,&ctx);
for(i=0;i<20;i++)
{
printf("%02x",output[i]);
}
putchar('\n');
return 0;
}
[email protected]:~/ssl_examples/sha$ gcc sha1_examples.c -o sha1_examples -lcrypto
[email protected]:~/ssl_examples/sha$ ./sha1_examples
Enter the file name:
hello
8B68A3837EC3518BAB75BCF155F1507B694A2968