哈希算法基本知识快速了解
本质
是用较少的信息来区分身份的唯一性
拓展要求
正向快速:快速生成hashcode
逆向困难: 尽可能不要根据hashcode计算出原文,
如果我们不附加一个随机的salt值,HASH口令是很容易被字典攻击入侵的解.
还有常用的策略是进行一些异或或者移位操作,让人很难把握规律性
输入敏感:一点信息差异hash值看起来很大不同
冲突避免:既然是缩短就一定存在碰撞,关键在于尽可能减少
有限空间内尽量均匀:节省空间,避免碰撞
常见的哈希算法
MD5:MD5 已被证明不具备"强抗碰撞性".输出128位,除了更高的碰撞率,另外已经有MD5被破解的案例.现在此算法不推荐使用,一般用SHA家族替代.
SHA:是一个 Hash 函数族.SHA-1,SHA-2,输出160位hashcode,SHA-1 已被证明不具"强抗碰撞性"
常见实现
一般乘加迭代运算,在不少的hash算法中,使用的是异或+加法进行迭代,速度和前者差不多
对于一些大的商业机构来说, MD5 和 SHA1 已经不够安全,推荐至少使用 SHA2-256 算法。
替代方案
Android中使用SparseArray代替HashMap
省空间: 稀疏数组存储,使用基本类型int做key,不需要Par<K,V>节约内存
排序的数组,二分查找,每次插入都排序,O(n),性能有失
哈希应用
加密(虽然本意不是这个作用)
唯一身份识别(指纹)/数据校验
密码学
数据结构中
负载均衡
扩容
缩容
不均匀处理:虚拟节点
分库分表(存在缩容和扩容问题如何处理?)
网友评论