
关于Hash函数说法正确的是()。A.是将任意长度的信息映射成一个较短的定长输出信息的函数 B.是将信息加密的函数 C.h=H(M),M是变长的报文,h是定长的散列值 D.h=H(M),M是变长的报文,h是不定长的散列值
哈希函数的核心特征是将任意长度输入转换为固定长度输出,这一特性直接体现在选项A和C中。根据定义,哈希函数(散列函数)接收“任意长度的字符串作为输入”并“产生固定长度的输出值”,例如SHA-256输出256位哈希值,MD5输出128位结果。这种“压缩映射”关系意味着输入(如报文M)长度可变,而输出(哈希值h)长度固定,因此选项C的描述“h=H(M),M是变长的报文,h是定长的散列值”完全符合哈希函数的定义。
选项B将哈希函数定义为“加密函数”是不准确的。加密的本质是可逆的信息转换,而哈希函数是“单向密码体制”,仅能从输入计算输出,无法从输出反推输入。例如,已知MD5哈希值无法还原原始文件内容,这与加密后可解密的特性截然不同。
选项D称哈希值“不定长”,与所有权威定义冲突。无论是基础哈希函数还是加密哈希函数(如SHA系列),其输出长度都是固定的——SHA-1输出160位,SHA-256输出256位。这种固定长度特性是哈希函数用于数据完整性校验、数字签名的基础,例如通过比对文件哈希值判断内容是否被篡改。
正确答案:A、C
哈希函数的本质是“从任何一种数据中创建小的数字‘指纹’”,其定长输出与变长输入的映射关系,使其成为现代密码学中数据校验和身份认证的核心工具。思考:如果哈希函数输出长度可变,数字签名和区块链中的工作量证明机制还能实现吗?