C BlowFish对称加密算法详解

 更新时间:2021年08月16日 10:37:29   作者:PwnGuo  
这篇文章主要介绍了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.

子密钥扩展算法如下:

  1. 按顺序使用常数π的小数部分初始化P数组和S-box
  2. 对P数组和密钥进行逐位异或,需要时重用密钥。
  3. 使用当前的P数组和S-box,对全0和64位分组使用BlowFish算法进行加密,用输出替代P1,p2,
  4. 使用当前的P和S对第3步的输出进行加密,并输出替代P3,P4
  5. 继续上面的过程,直到按顺序替代所用的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对称加密内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言float内存布局示例详解

    C语言float内存布局示例详解

    这篇文章主要为大家介绍了C语言float内存布局示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • C语言中static和auto用法详解

    C语言中static和auto用法详解

    大家好,本篇文章主要讲的是C语言中static和auto用法详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • C/C++ Qt StringListModel 字符串列表映射组件详解

    C/C++ Qt StringListModel 字符串列表映射组件详解

    StringListModel 字符串列表映射组件,该组件用于处理字符串与列表框组件中数据的转换,通常该组件会配合ListView组件一起使用,本文给大家介绍了C/C++ Qt StringListModel 字符串列表映射组件的相关知识,感兴趣的朋友跟随小编一起看看吧
    2021-12-12
  • C++实现简单扫雷小游戏

    C++实现简单扫雷小游戏

    这篇文章主要为大家详细介绍了C++实现简单扫雷小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-09-09
  • C++类模板与函数模板基础详细讲解

    C++类模板与函数模板基础详细讲解

    C++语言的模板技术包括函数模板和类模板,模板技术是一种代码重用技术,函数和类是C++语言中两种主要的重用代码形式,这篇文章主要介绍了C++函数模板和类模板,需要的朋友可以参考下
    2022-08-08
  • c语言 字符串的拼接和分割实例

    c语言 字符串的拼接和分割实例

    今天小编就为大家分享一篇c语言 字符串的拼接和分割实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • C语言实现访问及查询MySQL数据库的方法

    C语言实现访问及查询MySQL数据库的方法

    这篇文章主要介绍了C语言实现访问及查询MySQL数据库的方法,涉及C语言基于libmysql.lib实现访问MySQL数据库的相关操作技巧,需要的朋友可以参考下
    2018-01-01
  • C++中const用于函数重载的示例代码

    C++中const用于函数重载的示例代码

    这篇文章主要介绍了C++中const用于函数重载的相关资料,需要的朋友可以参考下
    2017-09-09
  • C语言中getchar的用法以及实例解析

    C语言中getchar的用法以及实例解析

    getchar()是stdio.h中的库函数,它的作用是从stdin流中读入一个字符,下面这篇文章主要给大家介绍了关于C语言中getchar的用法以及实例的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • c语言中enum类型的用法案例讲解

    c语言中enum类型的用法案例讲解

    这篇文章主要介绍了c语言中enum类型的用法案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是本文的详细内容,需要的朋友可以参考下
    2021-07-07

最新评论