C,BlowFish对称加密算法详解,久久派带你了解更多相关信息。
1.算法原理
BlowFish算法基于Feistel网络,加密函数迭代执行16轮,分组长度为64位,密钥长度可以从32位到448位。算法由两部分组成,密钥扩展部分和数据加密部分,密钥扩展部分将最长最长为448位的密钥转化成共4168字节长度的子密钥数组,其中,数据加密由一个16轮的Feistel网络完成,每轮由一个密钥相关置换和一个密钥与数据相关的替换组成。
(1)子密钥
BlowFish算法子密钥在加密前预计算产生。
P数组由18个32位字的子密钥组成。P1,P2\’\’\’\’\’\’.P18
4个8X32的包含总共1024个32位字的S-box.
子密钥扩展算法如下:
- 按顺序使用常数π的小数部分初始化P数组和S-box
- 对P数组和密钥进行逐位异或,需要时重用密钥。
- 使用当前的P数组和S-box,对全0和64位分组使用BlowFish算法进行加密,用输出替代P1,p2,
- 使用当前的P和S对第3步的输出进行加密,并输出替代P3,P4
- 继续上面的过程,直到按顺序替代所用的P数组和S-Box中的元素。
2.加密代码实现
BlowFish由16轮的Fistel网络组成,输入是一个64位的数据元素X,将X分成两个32位部分,XL,XR,加密如下:
void Blowfish_encipher(unsigned long *xl, unsigned long *xr){ unsigned long Xl; unsigned long Xr; unsigned long temp; short i; Xl = *xl; Xr = *xr; for (i = 0; i < 16; ++i) { //16轮的 Xl = Xl ^ P[i]; Xr = F(Xl) ^ Xr; temp = Xl; Xl = Xr; Xr = temp; } temp = Xl; Xl = Xr; Xr = temp; Xr = Xr ^ P[N]; Xl = Xl ^ P[N + 1]; *xl = Xl; *xr = Xr;}
ANALYZER通过检测4个8X32的包含总共1024个32位字的S-box.但通过动态读取方式时,较难识别。
到此这篇关于C BlowFish对称加密算法详解的文章就介绍到这了,更多相关C BlowFish对称加密内容请搜索趣讯吧以前的文章或继续浏览下面的相关文章希望大家以后多多支持趣讯吧!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/13247.html