欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

参考blog:https://www.cnblogs.com/wunaozai/p/3887009.html