赞
踩
hash函数是一种常见的单向不可逆加密函数,本篇主要分析hks_mbedtls_hash.c代码
文件路径(security_huks\frameworks\huks_standard\main\crypto_engine\mbedtls\src\hks_mbedtls_hash.c)
将数据打乱混合,通过散列算法,重新创建一个叫做散列值的指纹,通常用一个短的随机字母和数字组成的字符串表示散列值。
哈希(Hash)算法是一种单向密码体制,即只有加密过程,没有解密过程。
相同输入经过同一哈希函数得到相同散列值,但并非散列值相同则输入结果相同。
哈希函数是一种无需密钥对的加密方式
无需借助任何秘钥,主要用于针对对称和非对称加密过程中需要保护的部分提供完整性、防伪造的支持。
常见的哈希函数有:MD5,SHA-1,SHA-2(SHA256\SHA384\SHA512),SHA-X(系列)
文件中主要就一个函数实现hash过程。该函数将长度不固定的消息(message)作为输入参数,运行特定的Hash函数,生成固定长度的输出,这个输出就是Hash,也称为这个消息的消息摘要(Message Digest)算法。
参数详解:
//单项散列函数/也叫消息摘要算法 int32_t HksMbedtlsHash(uint32_t alg, const struct HksBlob *msg, struct HksBlob *hash) { int32_t ret; switch (alg) { case HKS_DIGEST_SHA256: ret = mbedtls_sha256_ret(msg->data, msg->size, hash->data, 0); /* 0 for SHA-256 */ break; case HKS_DIGEST_SHA384: ret = mbedtls_sha512_ret(msg->data, msg->size, hash->data, 1); /* 1 for SHA-384 */ break; case HKS_DIGEST_SHA512: ret = mbedtls_sha512_ret(msg->data, msg->size, hash->data, 0); /* 0 for SHA-512 */ break; //针对不同算法对msg结构体的data域进行初始化,不同算法对应不同初始化内容 default: return HKS_ERROR_INVALID_DIGEST; } if (ret != HKS_MBEDTLS_SUCCESS) { HKS_LOG_E("Mbedtls hash failed! mbedtls ret = 0x%X", ret); //判断初始化是否成功 return ret; } ret = HksGetDigestLen(alg, &(hash->size)); //将alg对应算法的长度写进hash->size if (ret != HKS_SUCCESS) { HKS_LOG_E("Get digest len failed!"); } return ret;//返回成功值0 }
以上就是hash单向散列函数的介绍,以及代码中的实现。感谢阅读和点赞
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。