openssl学习(一) 摘要

冬夏晴天
openssl学习(一)    摘要

说在前面的话:
  最近要做一个使用openssl生成证书请求以及证书的解析的工作,想着openssl的一些功能也是多多少少的用了几年了,但是吧,对很多内容都是一知半解,很多编码工作都是通了,好,就这样吧.
  好在这个工作不是很着急,就趁着这个机会,好好学习一下openssl.
  把学习过程记录下来,一是,加深自己的印象,二是,可以和大家一起讨论.所以,如果发现有不对的地方,欢迎大家指正.
  今天就从最简单的hash算法开始吧.
  对了,我的环境是ubuntu18.4,openssl-1.1.1

  数字摘要,哈希算法,散列函数,hash函数其实都是一个意思.就是将任意长度的数据,变成固定长度的短消息.不同的算法,生成的长度不一样,以SHA为例子.
  

#include <stdio.h>
#include <string.h>
#include <openssl/sha.h>

int main(void)
{
        unsigned char in[] = "abcdefghijklmnopqrstuvwxyz";
        unsigned char out[20] = {0};
        int in_len = strlen((const char *)in);
        int i;
        
        /* method 1,可以多次调用SHA1_Update,填充多组数据 */
        SHA_CTX sha_ctx;
        SHA1_Init(&sha_ctx);
        SHA1_Update(&sha_ctx, in, in_len);
        SHA1_Final(out, &sha_ctx);
        printf("SHA1 digest result :\n");
        for (i = 0; i < 20; i++)
                printf("%x ", out[i]);
        printf("\n");
        
        /* method 2 */
        SHA1(in, in_len, out);
        printf("SHA1 digest result :\n");
        for (i = 0; i < 20; i++)
                printf("%x ", out[i]);
        printf("\n");
        
        return 0;
}

SHA1计算的结果长度为20.其他的长度如下:
 #define SHA_DIGEST_LENGTH 20
 #define SHA224_DIGEST_LENGTH 28
 #define SHA256_DIGEST_LENGTH 32
 #define SHA384_DIGEST_LENGTH 48
 #define SHA512_DIGEST_LENGTH 64
 详细可以参看头文件 openssl/sha.h.
常用的还有md算法,以及国产算法sm3,sm3将在以后的EVP中来学习.

阅读 332

_

1 声望
0 粉丝
0 条评论
你知道吗?

_

1 声望
0 粉丝
宣传栏