Blowfish加密和解密的小工具,前些天分析了一个用Blowfish加密算法进行注册验证的程序,通过学习《加密与解密》中的相关文章,自己参照原程序写了个Blowfish加密和解密的小工具,以方便大家使用.建议input/output/key都能以文件为载体.毕竟结果很多都是非ascii的.

blowfish加密算法原理:

blowfish加密算法是一种对称的分组加密算法,每次加密一个64位分组,使用32位~448位的可变长度密钥,应用于内部加密。加密过程分为两个阶段:密钥预处理和信息加密。

blowfish加密算法中使用两个盒key—pbox[18]和key—sbox[4][256],以及一个核心的加密函数blowfish—encrypt()。这两个盒所占存储空间为(18×32+4×256×32)字节,即4186字节。加密函数blowfish—encrypt()输入64位明文,输出64位密文。

一、密钥预处理

blowfish加密算法的原密钥pbox和sbox是固定的,初始化方法是用π的小数部分,按每32位一次分配给pbox和sbox,即:

pbox[0]一0x243f6a88;

pbox[1]一0x85a308d3;

sbox[3][254]一0x578fdfe3;

sbox[3][255]一0x3ac372e6;

当加密一个信息时,需要自己选择一个key(64~448位),用这个key变换sbox和pbox,得到加密信息所用的key_pbox和key_sbox。

二、信息加密

信息加密采用加密函数blowfish—encrypt()。blowfish加密算法是一个16层的feistel网,加密一个64位分组需要16次的迭代,在迭代中使用key_pbox和key_sbox,最后得出64位的密文。由于计算中仅使用模232加、“异或”以及用key_sbox替代等操作,因此实现起来速度非常快。blowfish加密算法中有以下两个基本运算:

加法:字的模232相加,记为“+”。

按位“异或”:记为“⊕”。

三、信息解密

用blowfish加密算法解密,同样也需要两个过程:

1、密钥预处理,与加密时相同;

2、信息解密,把信息加密过程中的key_pbox逆序使用即可。

值得注意的是:与大多数分组密码不同,blowfish中解密顺序和加密顺序是相同的,而不能倒过来。

解密过程伪代码如下(i表示迭代次数):

对于i=1至16

xl=xl—p^[i]

xr=f(xl)^xr

交换xl和xr(最后一轮取消交换运算)

xr=xr^p[17]

xl=xr^p[18]

重新合并xl和xr,得到64位的明文。

blowfish加密算法性能分析:

blowfish设计的基本原理既容易理解又实现简单。与其他算法不同,子密钥的生成都是由加密函数blowfish—encrypt()完成,每个子密钥都会受到密钥位的影响,这 使得密钥和数据完全混合在一起,对密钥的分析显得十分困难。其中的f函数给fesistel网络一个很好的雪崩效应。

blowfish加密算法的另一个特点是在每一轮中同时对两部分文件加密,增加了密码的强度。blowfish加密算法用c语言和汇编实现起来都很方便,每个操作均为xor、mov、add。schneier将该算法与其他算法的执行时间进行比较。到目前为止,blowfish加密算法法的安全性还未受到挑战。

blowfish算法c语言,Blowfish 算法工具(Blowfish Tool)相关推荐

  1. 克鲁斯卡尔算法c语言,Kruskal算法(一)之 C语言详解

    最小生成树 在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树. 例如,对于如上图G4所示的连通网可以有多棵权值总和 ...

  2. bfgs算法c语言,机器学习算法实现解析——liblbfgs之L-BFGS算法

    在博文"优化算法--拟牛顿法之L-BFGS算法"中,已经对L-BFGS的算法原理做了详细的介绍,本文主要就开源代码liblbfgs重新回顾L-BFGS的算法原理以及具体的实现过程, ...

  3. 老鼠走迷宫php算法,C语言经典算法 - 老鼠走迷官(一)

    C语言经典算法 - 老鼠走迷官(一) 说明老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁,使用1来表 示老鼠的行走路径,试以程式求出由入口至出口的路径. 解法老鼠的走法有上.左.下 ...

  4. bf算法c语言'',BF算法

    BF算法,即暴力(Brute Force)算法,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符:若不相 ...

  5. 四元数算法 c语言,四元数算法运算规则及基本概念

    [酷飞网 51kufei.com]上周,我们为大家介绍了求解求解无人机姿态角的各种算法,那么四元数算法基本的运算法则又是什么呢?今天,我们将为大家介绍四元数算法运算规则及基本概念. 大家知道,四元数可 ...

  6. apriori算法 c语言,数据挖掘算法——Apriori算法

    Apriori算法 首先,Apriori算法是关联规则挖掘中很基础也很经典的一个算法. 转载来自:链接:https://www.jianshu.com/p/26d61b83492e 所以做如下补充: ...

  7. 高斯平滑算法 c语言,高斯模糊算法(gaussian)

    项目上对图像处理需要用到点高斯算法,网上找到一篇对原理及部分问题分析讲解的还不错的文章,分享一下,后付自己的一段代码 - 理论 - 高斯分布函数可表示为一个一维的函数G(x) 或者一个二维的函数G(x ...

  8. prim算法c语言,Prim算法(一)之 C语言详解

    本章介绍普里姆算法.和以往一样,本文会先对普里姆算法的理论论知识进行介绍,然后给出C语言的实现.后续再分别给出C++和Java版本的实现. 普里姆算法介绍 普里姆(Prim)算法,和克鲁斯卡尔算法一样 ...

  9. 自动寻路算法C语言,bfs算法(c语言贪吃蛇自动寻路算法)

    广度优先法(BFS)算法C/C++代码,要说明和图解!谢谢! #include #define MAX 10 int front=-1,rear=-1; struct node { int value ...

  10. 最小延迟调度问题算法c语言,【算法概论】贪心算法:最小延迟调度问题

    最小延迟调度问题 Scheduling to Mnimizing Lateness 问题描述: 假定有一单个的资源在一个时刻只能处理一个任务.现给定一组任务,其中的每个任务 i 包含一个持续时间 ti ...

最新文章

  1. PHP MVC框架核心类
  2. python字符串与列表与运算_[Python学习笔记1]Python语言基础 数学运算符 字符串 列表...
  3. 王家林 云计算分布式大数据Hadoop实战高手之路第七讲Hadoop图文训练课程:通过HDFS的心跳来测试replication具体的工作机制和流程...
  4. 系统架构:Web应用架构的新趋势 前后端分离的想法
  5. 520 钻石争霸赛 7-6 矩阵列平移(循环)
  6. C#开发高亮语法编辑器(一)——TextBox ,RichTextBox
  7. 预处理阶乘和阶乘逆元_计算数字的阶乘| 8086微处理器
  8. EDGE浏览器配合阿呆喵设置广告过滤
  9. 计算机科学全程,EduGlobalB2B德保罗大学金融计算机科学硕士桥梁STEM全程免GREGMAT...
  10. Golang 任意类型切片的增删改查
  11. 华为机试HJ62:查找输入整数二进制中1的个数
  12. visual studio 2015 rc cordova -hello world
  13. HTML5新规范和CSS3新特性
  14. oracle同义词表不存在,Oracle同义词的使用
  15. hdu5750Dertouzos
  16. TB-RK1808M0最新固件烧录和驱动更新
  17. Qt之GIF录制工具
  18. 初学者必读VRay 2.0材质设置(1)——VRay材质设置基础
  19. 交通领域主要SCI期刊——2017年JCR
  20. Mysql8.0.28-winx64安装

热门文章

  1. 程序员经常浏览的网站
  2. 闪电Android视频转换器,闪电Android视频转换器
  3. spark+dataframe+小汽车摇号倍率与中签率分析
  4. 网络广告行业资料整理
  5. 国外全能免费主页空间
  6. 第七周助教工作总结——NWNU李泓毅
  7. java 公历 农历_java中怎么把公历日期转成农历日期
  8. 上传声音 微信小程序_微信小程序实现录制、试听、上传音频功能(带波形图)...
  9. 超级AI买家阿里巴巴
  10. python英语单词 扇贝英语安卓下载_扇贝单词英语版app下载-扇贝单词英语版安卓版(附修改词汇书教程) - 超好玩...