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++基本用法实践之移动语义详解

    C++基本用法实践之移动语义详解

    移动(move)语义是C++引入了一种新的内存优化,以避免不必要的拷贝,下面小编就来和大家简单聊聊C++中移动语义的相关使用吧,希望对大家有所帮助
    2023-07-07
  • 解析C++中构造函数的默认参数和构造函数的重载

    解析C++中构造函数的默认参数和构造函数的重载

    这篇文章主要介绍了解析C++中构造函数的默认参数和构造函数的重载,是C++入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • 深入探讨POJ 2312 Battle City 优先队列+BFS

    深入探讨POJ 2312 Battle City 优先队列+BFS

    本篇文章是对优先队列+BFS进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C语言高斯消元法的使用详解

    C语言高斯消元法的使用详解

    本篇文章是对C语言中高斯消元法的使用进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • QString和char以及string之间的赋值详解

    QString和char以及string之间的赋值详解

    QString 、string 、char* 之间免不了相互赋值。下面是自己的总结。需要的朋友可以过来参考下
    2013-10-10
  • C语言二叉树的概念结构详解

    C语言二叉树的概念结构详解

    二叉树可以简单理解为对于一个节点来说,最多拥有一个上级节点,同时最多具备左右两个下级节点的数据结构。本文将详细介绍一下C++中二叉树的实现和遍历,需要的可以参考一下
    2022-08-08
  • Opencv实现轮廓提取功能

    Opencv实现轮廓提取功能

    这篇文章主要为大家详细介绍了Opencv实现轮廓提取功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • C++实现通讯录管理系统设计

    C++实现通讯录管理系统设计

    这篇文章主要为大家详细介绍了C++实现通讯录管理系统设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • 基于C语言实现高级通讯录的示例代码

    基于C语言实现高级通讯录的示例代码

    这篇文章主要为大家详细介绍了如何利用C语言实现一个高级通讯录的功能,文中的示例代码讲解详细,具有一定的借鉴价值,需要的小伙伴可以参考一下
    2023-01-01
  • 利用C++如何实现一个阻塞队列详解

    利用C++如何实现一个阻塞队列详解

    这篇文章主要给大家介绍了关于利用C++如何实现一个阻塞队列的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10

最新评论