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
你知道吗?
0 条评论