哈希函数是我们做校验时经常会用到的密码学工具,目前常用的工具有MD5、SHA1、SHA256、SHA512等。其中MD5已经被证实不安全,目前只能作为一种辅助的校验手段,而不能防篡改。下面介绍如何使用mbedTLS协议栈中的hash代码生成上述4种哈希摘要。
首先先到mbedTLS官网下载最新的协议栈源代码:https://tls.mbed.org/source-code
和上一篇AES一样,也是新建Visual Studio C工程,添加头文件mbedtls文件夹到工程目录下。然后是添加C文件,这次需要用到4个哈希计算,故添MD5.c、SHA1.c、SHA256.c、SHA512.c四个文件。
在主函数里添加简单demo,分别对“Hello, world!”进行哈希摘要计算:
#include "mbedtls/config.h"
#include "mbedtls/platform.h"
#include <stdio.h>
#define mbedtls_printf printf
#define MD5 0
#define SHA1 1
#define SHA256 2
#define SHA512 3
#define MODE SHA512
#include "mbedtls/md5.h"
#include"mbedtls/sha1.h"
#include"mbedtls/sha256.h"
#include"mbedtls/sha512.h"
int main(void)
{
int counter = 0;
if (MODE == MD5)
{
unsigned char digest[16];
char str[] = "Hello, world!";
mbedtls_md5((unsigned char *)str, 13, digest);
for (;;)
{
counter++;
}
}
if (MODE == SHA1)
{
unsigned char digest[20];
char str[] = "Hello, world!";
mbedtls_sha1((unsigned char *)str, 13, digest);
for (;;)
{
counter++;
}
}
if (MODE == SHA256)
{
unsigned char digest[32];
char str[] = "Hello, world!";
mbedtls_sha256((unsigned char *)str, 13, digest, 0);
for (;;)
{
counter++;
}
}
if (MODE == SHA512)
{
unsigned char digest[64];
char str[] = "Hello, world!";
mbedtls_sha512((unsigned char *)str, 13, digest, 0);
for (;;)
{
counter++;
}
}
return 0;
}
经过验证,该哈希函数能够提供正确的摘要值 :)