基于生命游戏的hash函数改进

0 引 言

       Hash函数是在20世纪50年代引入的技术,它将一个任意长度的消息映射为一个固定长度的消息摘要。Hash函数最早用于检测消息传输中由于噪声而发生的随机错误,后来主要用于检测消息传输中人为的错误或杜撰的消息。基于Hash函数消息认证应用迅速发展,广泛用于包括消息认证、口令检查、软件保护、构造加密算法等领域.
       生命游戏是英国数学家约翰·何顿·康威在1970年发明的细胞自动机,生命游戏中每一个格子遵循简单的规则,即以下规则:
1.每个细胞的状态由该细胞及周围八个细胞上一次的状态所决定;
2. 如果一个细胞周围有3个细胞为生,则该细胞为生,即该细胞若原先为死,则转为生,若原先为生,则保持不变;
3. 如果一个细胞周围有2个细胞为生,则该细胞的生死状态保持不变;
4. 在其它情况下,该细胞为死,即该细胞若原先为生,则转为死,若原先为死,则保持不变.

1 基于生命游戏的hash函数

       生命游戏具有简单的规则,每个细胞单元之间相互作用,表现出极其复杂的形式。游戏的最后演化结果取决于游戏的初始条件和规则.
用生命游戏对一段数据进行hash运算,其算法描述如下:
①选定画布大小;
②确定规则;
③解决超出边界部分的运算,可以按照其对应边界进行运算,比如在左边界上的细胞,由其周围细胞与其对应的有边界上的细胞进行确定生死的运算,也可以舍去,或者其他规则;
④确定循环次数;
⑤确定需要选取hash值的位数大小;
⑥处理与转换数据;
⑦得到hash值.
       在这里不能使用其原始规则,因为原始规则会很快将所有的数据丢失完,所以在这,规则要加以改变.

2 关于算法的相关计算

       单向性:
       这里以原规则为例进行计算,一个为生的格子,有两种情况,首先,这个格子为生,且周围格子上次的状态为2生6死,这样就有28种情况; 或者,这个格子周围的格子上次的状态为3生5死,这样就有56种情况.
       一个为死的格子,有两种情况,首先,这个格子为死,且周围格子上次的状态为2生6死,这样就有28种情况; 或者,这个格子周围的格子上次的状态不为3生5死且这个格子上次状态为生,这样就有172种情况;再者,这个格子上次的状态为死,且周围格子上次的状态为2生6死,这样就有28种情况.
       因为这个格子上次的状态是丢失的,并且这只是一个格子,所以保证了绝对的单向性。

3 性能分析与算法仿真

对上述的算法进行实验分析:
①取200行300列的画布;
②取规则为原始的生命游戏规则的改进,周围有2个或者4个格子为生,则这个格子不变,周围有3个格子为生,则这个格子为生,其余情况均为死;
③解决超出边界部分的运算,按照其对应边界进行运算,将画布变为一个闭环;
④之后取一组数据,这里取随机数,一个30行30列的矩阵,为了直观的表现,将二进制中1取为黑色,0取为白色,展示如图figure1;
figure1
figure1
⑤确定循环次数,这里为了展示稳定后的结果,取一个较大的次数,取600次;
⑥确定需要选取hash值的位数大小,作为演示,这里取整张画布;
运行
⑦得到hash值,直观展示如图figure2.
figure2
figure2

4 混乱与扩散性质统计分析

       将上述例子中的数据第二行第二列由1改为0,直观展示如图figure3
figure3
figure3
       可以看见第二行第二列的颜色变为白色,再次进行hash,得到hash值,直观图如图figure4.
figure4
figure4
       为了隐藏明文信息的冗余度,Shannon提出了混乱与扩散的概念,即加密体制要求充分均匀的利用密文空间。要尽量做到明文对应的Hash值不相关,而对于信息的二进制表示,每比特只能为0或1两种可能,因此理想Hash的扩散效应是初值细微变化导致Hash值50%的变换。从上面的Hash实验可以看出,数据改变一个比特,变化度达到48.735%,接近50%,具有较好的混乱和扩散性。

4 改进

       可以通过简单地取整个画布的一小块作为hash值得最终结果,也可以将二维改成三维或者更高维的空间。可以通过画布的大小来确定输入信息的大小,这样将hash函数变成了一个灵活多变的函数,以便适应不同场合的需要。

5 结语

       通过改变生命游戏的规则,将生命游戏与hash函数结合,通过图像更好的展示了hash的过程。

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FishPotatoChen

谢谢您的支持,我会更努力的~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值