JAVA密码学算法实现(第一弹)Hash算法
Posted MI小白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA密码学算法实现(第一弹)Hash算法相关的知识,希望对你有一定的参考价值。
Java密码学算法的实现有三部分,分别是Hash算法,单密钥算法以及双线性映射。酒家也就准备分三弹去了解,入了门之后再去瞅JPBC。
Hash函数的介绍:
Hash函数是将任意长的子串M映射成一个较短的定长输出的子串H的函数(函数名一般为h/hash)。H = h(M)为M的Hash值。
要求h(M)必须易于运算
可以发现h映射是一个多对一的映射
一般为了安全性,我们要求很难从H求出原来的M,或者从H求出一个M',使得h(M)=h(M')
但是,我们可以验证任意给定子串M'是否与M具有相同的Hash值
两类Hash函数——有密钥,无密钥
有密钥的函数定义为h(k,M),有密钥的人可以计算,一般具有身份认证功能
无密钥的函数定义为h(M),任何身份都能计算,只用于检测接受数据的完整性或者验证输入内容是否为原始输入内容
有密钥函数一般是由无密钥函数+单密钥加密函数合并实现
无密钥函数&单密钥加密函数作为密码学原型函数
有密钥函数看作是一种扩展
Hash函数需要满足的形式
混合变换(Mixing Transformation)——对于任意的输入x,输出的杂凑值h(x)应当和区间[0,2|h|]中均匀的二进制串在计算上是不可区分的。
抗碰撞攻击(Collision Resistance)——找两个输入x,y,且x!=y,使得h(x)=h(y),在计算上应当时不可行的。为使假设成立,要求h的输出空间足够大。|h|最小为128,典型为160
抗原像攻击(Pre-image Resistance)——已知一个杂凑值h,找出一个输入串,使得h=h(x),在计算上时不可行的。
有效性(Practical Efficiency)——给定一个输入x,h(x)的计算可以在关于x的长度规模的低阶多项式时间内完成。也就是说,对于任意的输入x,计算h(x)是非常快的。
以上是关于JAVA密码学算法实现(第一弹)Hash算法的主要内容,如果未能解决你的问题,请参考以下文章