openssl学习(一) 摘要
说在前面的话:
最近要作一个使用openssl生成证书请求以及证书的解析的工做,想着openssl的一些功能也是多多少少的用了几年了,可是吧,对不少内容都是只知其一;不知其二,不少编码工做都是通了,好,就这样吧.
好在这个工做不是很着急,就趁着这个机会,好好学习一下openssl.
把学习过程记录下来,一是,加深本身的印象,二是,能够和你们一块儿讨论.因此,若是发现有不对的地方,欢迎你们指正.
今天就从最简单的hash算法开始吧.
对了,个人环境是ubuntu18.4,openssl-1.1.1算法
数字摘要,哈希算法,散列函数,hash函数其实都是一个意思.就是将任意长度的数据,变成固定长度的短消息.不一样的算法,生成的长度不同,以SHA为例子.
ubuntu
#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中来学习.函数