hash值

本文介绍了哈希函数的基本概念,解释了它是如何将任意长度的数据转换为固定长度的输出,以及这一过程背后的简单工作原理。同时探讨了哈希值的两个主要特征:重复性和不可逆性,并通过实例说明了不可逆性的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概念
   hash(散列、杂凑)函数,是将任意长度的数据映射到有限长度的域上。直观解释起来,就是对一串数据m进行杂糅,输出另一段固定长度的数据h,作为这段数据的特征(指纹)。也就是说,无论数据块m有多大,其输出值h为固定长度。到底是什么原理?将m分成固定长度(如128位),依次进行hash运算,然后用不同的方法迭代即可(如前一块的hash值与后一块的hash值进行异或)。如果不够128位怎么办?用0补全或者用1补全随意,算法中约定好就可以了。
特征
    hash值有两大特征:重复、不可逆。
    解释下为什么不可逆,就好比(-2)的平方等于4,2的平方等于4.你知道结果是4,但是不能逆推回原始值是多少。

03-13
### Hash概念 Hash是由特定的哈希函数处理原始数据后产生的固定长度字符串。无论输入的数据有多大或者多复杂,最终生成的hash总是具有相同的长度,并通常表示为十六进制数[^2]。 ### Hash的计算方法 对于不同的应用场景可以选择不同类型的哈希算法来计算hash。例如,在C++编程环境中可以通过调用CryptoPP库实现多种标准哈希算法;而像SHA-1这样的具体算法能够产生一个160比特长的结果串作为消息摘要[^4]。 ```cpp #include <cryptopp/sha.h> #include <cryptopp/filters.h> #include <cryptopp/hex.h> std::string CalculateSHA1(const std::string& input) { using namespace CryptoPP; SHA1 sha1; HexEncoder encoder; StringSource s(input, true, new HashFilter(sha1, new Redirector(encoder) ) ); return static_cast<std::string>((const char*)encoder.GetPointer(), (size_t)encoder.MaxRetrievable()); } ``` 需要注意的是,尽管SHA-1曾经非常流行,但由于其容易受到碰撞攻击的影响,现在已不建议在高敏感度场景下使用该算法,转而采用更为先进的SHA-256或SHA-3等替代方案。 ### Hash的安全性和用途 为了增强安全性,除了选择合适的哈希算法外,还可以考虑进一步对所得hash实施额外层次上的加密保护措施。此外,hash函数本身就在多个方面扮演着重要角色: - **数据完整性校验**:通过对同一份文件多次计算并对比hash得方式确认文件未被修改过; - **数字签名**:利用公钥基础设施(PKI),结合私钥签署文档的同时也对其hash进行了加密操作; - **密码存储**:当保存用户登录凭证时只保留经由强单向散列转换后的形式而非明文口令[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值