哈希算法是一个函数,能把几乎所有的数字文件转换为一串由字符和数字组成的看似乱码的字符串。因此哈希函数也是加密函数,它具备两个特点:
- 不可逆性。输入信息得到输出的哈希值往往比较容易,但是由输出的字符串反推输入信息非常难。
- 输出值唯一性和不可预测性。即便两个输入信息只有一点点区别,得到的哈希值也会相差甚远。
均值哈希算法aHash
步骤:
- 将图片缩放为88,保留结构,除去细节(为什么是88?为了后续生成64位的值)
- 转换为灰度图(如果要考虑色彩的相似性,就不用转)
- 计算灰度图所有像素的平均值
- 像素值大于平均值记作1,相反为0,总共64位
- 将上述得到的1和0组合起来就是图片的指纹(哈希值)
- 对比两幅图的指纹,计算汉明距离(也就是两个64位的hash值有多少位是不一样的),不同位数越小,图片越相似。
差值哈希算法dHash
步骤基本与aHash类似:
- 将图片缩放为8*9,保留结构,除去细节
- 转换为灰度图(如果要考虑色彩的相似性,就不用转)
- 像素值大于后一个像素值就记作1,相反为0,每行有9个像素,会有8个差值,有8行,总共也是64位
- 将上述得到的1和0组合起来就是图片的指纹(哈希值)
- 对比两幅图的指纹,计算汉明距离(也就