
基于Feistel结构的加密
发布日期:2021-05-07 22:59:43
浏览次数:21
分类:精选文章
本文共 2037 字,大约阅读时间需要 6 分钟。
基于Feistel结构的加密方法是一种多轮分组加密技术,广泛应用于密码学领域。以下将详细介绍基于Feistel结构设计的分组加密方案,并提供实现代码和实验结果。
Feistel结构分组加密设计
问题描述
本实验设计了一个4轮Feistel结构的分组加密方案,分组长度为8比特,分为两半,每半4比特(L和R)。具体实现如下:
- 轮函数定义:f = P(S(E® + K_i)),其中i=1,2,3,4,+表示异或操作。
- 右半分组R:①②③④
- 左移异或操作E®:②①②③④③
- S盒:使用DES的S盒,输入6比特,输出4比特。具体实现如下:
- S(①②③④⑤⑥) = ①②③④
- 置换盒P:P(①②③④) = ②④①③
- 轮密钥编排:K1=111111,K2=111000,K3=000111,K4=000000
明文为“朱靖宇”,提供C++实现代码和密文输出。
C++实现代码
#include#include using namespace std;using Byte = unsigned char;using Dword = unsigned long;#define L 0xF0#define R 0x0F#define Mask_r 0x21#define Mask_c 0x1E// S盒定义array S = { {14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7}, {0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8}, {4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0}, {15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13}};Byte e(Byte a) { a = a + ((a & 0x4) << 2); a <<= 1; a += (a & 0x4) >> 2; return a;}Byte s(Byte a) { int r = ((a & 0x20) >> 4) + (a & 0x1); int c = (a & Mask_c) >> 1; return S[r][c];}Byte p(Byte a) { Byte p0 = a & 0x01; Byte p1 = a & 0x02; Byte p2 = a & 0x04; Byte p3 = a & 0x08; a = (p0 << 2) + (p2 << 1) + (p1 >> 1) + (p3 >> 2); return a;}void f(Byte &w, Byte k) { w = e(w & R) ^ k; w = s(w); w = p(w);}void Feistel(Byte &w, Byte k) { Byte w_L = (w & L) >> 4; Byte w_R = w & R; f(w_R, k); w_R ^= w_L; w_L = w & R; w = (w_L << 4) + w_R;}void Encode(Byte *P, Byte *K) { for (int i = 0; P[i] != '\0'; ++i) { for (int j = 0; j < 4; ++j) { Feistel(P[i], K[i]); } P[i] = ((P[i] & R) << 4) + ((P[i] & L) >> 4); }}int main() { Byte K[4] = {0x3F, 0x38, 0x07, 0x00}; Byte P[7] = "朱靖宇"; cout << "明文为: " << P << endl; cout << "轮密钥(0x)为: "; for (int i = 0; i < 4; ++i) { printf("%02X ", K[i]); } cout << endl << endl << "开始加密" << endl; Encode(P, K); cout << "密文为: " << P << endl; return 0;}
实验结果
编译并运行上述代码,输出如下:
明文为: 朱靖宇轮密钥(0x)为: 3F 38 07 00开始加密密文为: 朱靖宇
实验截图可参考以下链接:图片链接。
发表评论
最新留言
不错!
[***.144.177.141]2025年04月08日 13时21分13秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
js求阶乘
2019-03-05
Nginx---惊群
2019-03-05
项目中常用的审计类型概述
2019-03-05
(九)实现页面底部购物车的样式
2019-03-05
python-day3 for语句完整使用
2019-03-05
基于LabVIEW的入门指南
2019-03-05
weblogic之cve-2015-4852
2019-03-05
Java注释
2019-03-05
C++ 函数重载
2019-03-05
使用mybatis-generator生成底层
2019-03-05
Mybatis【5】-- Mybatis多种增删改查那些你会了么?
2019-03-05
计算输入的一句英文语句中单词数
2019-03-05
lvs+keepalive构建高可用集群
2019-03-05
6 个 Linux 运维典型问题
2019-03-05
取消vim打开文件全是黄色方法
2019-03-05
一个系统部署多个tomcat实例
2019-03-05
HP服务器设置iLO
2019-03-05
从头实现一个WPF条形图
2019-03-05