SimpleDES

2023-10-29

转载 学习

http://pigheadx.me/blog/2011/04/s-desalgorithm/

下面从准备知识开始

C++ 使用bitset数据结构进行与或位运算

1.置换,举例说明,对”ABCDEFGH”做一下”82641753″置换的结果就是”HBFDAGEC”

2.循环移位,继续举例,”ABCDEFGH”循环左移2位结果就是”CDEFGHAB”.

3.S盒的替代选择,具体到S-DES来说就是输入的四位数”ABCD”在S盒中找第AD行BC列的数字作为输出,比如0101输入S0(见下)的话就是第1(01)行第2(10)列(0-3行,0-3列),输出为1即01,再比如1001输入S0的话就是第3(11)行第0(00)列,输出为3即11.

4.按位异或,举例的话1^1=0,1^0=1,0^1=1,0^0=0,1100^1010=0110,其实这个大家都懂吧.

 

S-DES算法的输入是一个8位的明文或者密文组和一个10位的密钥,输出是一个8位的密文或者明文组。

以下是S-DES所需的几个置换表

1)      P10 {3,5,2,7,4,10,1,9,8,6}

2)      P8 {6,3,7,4,8,5,10,9} 注意这个置换选择输入10位输出8位

3)      P4 {2,4,3,1}

4)      IP {2,6,3,1,4,8,5,7}

5)      IPI {4,1,3,5,7,2,8,6}

6)      EP {4,1,2,3,2,3,4,1} 注意这个是扩展置换,输入4位输出8位

以下是两个S盒

S0:ADBC 输入4位输出2位(十进制转化为二进制)

{1,0,3,2},

{3,2,1,0},

{0,2,1,3},

{3,1,3,2},

S1:

{0,1,2,3},

{2,0,1,3},

{3,0,1,0},

{2,1,0,3},

接下来就是加密和解密算法

首先讲子密钥的生成,子密钥在加密和解密算法中都有使用.

10位密钥 key = 01111 11101

对key做P10置换得到 11111 10011

记左半(高位)的为Lk=11111,右半(低位)为Rk=10011

Lk和Rk均循环左移1位,得到Lk=11111,Rk=00111

对Lk和Rk组合得到的11111 00111做P8置换选择,得到子密钥K1=0101 1111

Lk和Rk均再次循环左移2位,得到Lk=11111,Rk=11100

对Lk和Rk组合得到的11111 11100做P8置换选择,的到子密钥K2=1111 1100

以上,通过密钥得到了算法所需的子密钥.

 

下面是加密过程

首先是初始置换

对明文m=0001 0110做IP置换,得m”=0100 1001

接下来是标准的Feistel密码结构,共有两次循环

第一次循环

记左半(高位)为Lm=0100,右半(低位)为Rm=1001

对Rm做EP扩展置换,得Rm’=1100 0011

Rm’与子密钥K1按位异或,得Rm’=1001 1100

Rm’左半1001进入S0盒替代选择得11,右半1100进入S1盒替代选择的01,组合后得Rm’=1101

对Rm’做P4置换,得Rm’=1101

Rm’与Lm按位异或,得Lm’=1001

Lm’与Rm(最开始的那个Rm)组合得到输出 1001(Lm’) 1001(Rm)

至此完成第一次循环

然后交换高低位,作为第二次循环的输入,即1001(Rm) 1001(Lm’)作为输入

开始第二次循环

记左半为Ln=1001,右半为Rn=1001

对Rn做EP扩展置换,得Rn’=1100 0011

Rn’与子密钥K2按位异或,得Rn’=0011 1111

Rn’左半0011进入S0盒替代选择得10,右半1111进入S1盒替代选择的11,组合后得Rn’=1011

对Rn’做P4置换,得Rn’=0111

Rn’与Ln按位异或,得Ln’=1110

Ln’与Rn(最开始的那个Rn)组合得到输出 1110(Ln’) 1001(Rn)

至此完成第二次循环

最后进行逆初始置换对上面的输出m’=1110 1001做IPI置换得到密文m’=0111 01

S-DES加密结束.


 

 

下面开始解密,解密过程与加密基本一致,就是密钥使用顺序是相反的,第一次循环使用K2第二次循环使用K1

首先还是初始置换

对密文m=0111 0110做IP置换,得m’=1110 1001

 

Feistel密码结构

 

第一次循环

 

记左半(高位)为Lm=1110,右半(低位)为Rm=1001

 

对Rm做EP扩展置换,得Rm’=1100 0011

 

Rm’与子密钥K2按位异或,得Rm’=0011 1111

 

Rm’左半0011进入S0盒替代选择得10,右半1111进入S1盒替代选择的11,组合后得Rm’=1011

 

对Rm’做P4置换,得Rm’=0111

 

Rm’与Lm按位异或,得Lm’=1001

 

Lm’与Rm(最开始的那个Rm)组合得到输出 1001(Lm’) 1001(Rm)

 

至此完成第一次循环

 

然后交换高低位,作为第二次循环的输入,即1001(Rm) 1001(Lm’)作为输入

 

开始第二次循环

 

记左半为Ln=1001,右半为Rn=1001

 

对Rn做EP扩展置换,得Rn’=1100 0011

 

Rn’与子密钥K1按位异或,得Rn’=1001 1100

 

Rn’左半1001进入S0盒替代选择得11,右半1100进入S1盒替代选择的01,组合后得Rn’=1101

 

对Rn’做P4置换,得Rn’=1101

 

Rn’与Ln按位异或,得Ln’=0100

 

Ln’与Rn(最开始的那个Rn)组合得到输出0100(Ln’) 1001(Rn)

 

至此完成第二次循环

 

最后进行逆初始置换

 

对上面的输出m’=0100 1001做IPI置换得到明文m’=0001 0110

这样就完成的S-DES的解密

转载于:https://www.cnblogs.com/rookieDanny/p/7801043.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SimpleDES 的相关文章

  • 使用QZXing生成并解析二维码

    QZxing 是对 zxing 的一个封装 用于在 Qt 程序中加入条形码和二维码识别的功能 这里就讲讲如何编译和使用这个库 前几年 QZXing 的代码是放到 sourceforge net 上的 现在迁移到了 github com 所以
  • 人工智能概念

    人工智能概念 人工智能就是用人工方法在机器 计算机 上实现的智能 或称机器智能 即是研究如何用计算机来表示和执行人类的智能活动 以模拟人脑所从事的推理 学习 思考和规划等思维活动 并解决需要人类的智力才能处理的复杂问题 如医疗诊断 管理决策
  • GDAL多光谱与全色图像融合简单使用

    目录 简述 C 代码 效果对比 GDAL融合效果和原始多光谱波段对比 GDAL融合效果和原始全色波段对比 ARCGIS融合效果与原始全色和多光谱对比 GDAL融合效果与ArcGIS融合效果对比 简述 最近在GDAL的代码中看见了gdalpa
  • vector,list,deque区别

    http blog csdn net renkaihao article details 6803866 vector和built in数组类似 它拥有一段连续的内存空间 并且起始地址不变 因此它能非常好的支持随即存取 即 操作符 但由于它
  • C++中的RTTI

    文章目录 dynamic cast运算符 指针类型的dynamic cast 引用类型的dynamic cast typeid运算符 使用RTTI type info类 参考资料 RTTI Runtime Type Information
  • 数据结构与算法-列表(双向链表)设计及其排序算法

    0 概述 本文主要涵盖列表 双向链表 的设计及其排序算法的总结 列表是一种典型的动态存储结构 其中的数据 分散为一系列称作节点 node 的单位 节点之间通过指针相互索引和访问 为了引入新节点或删除原有节点 只需在局部调整少量相关节点之间的
  • 【干货】Chrome插件(扩展)开发全攻略(不点进来看看你肯定后悔)<转>

    干货 Chrome插件 扩展 开发全攻略 不点进来看看你肯定后悔 写在前面 我花了将近一个多月的时间断断续续写下这篇博文 并精心写下完整demo 写博客的辛苦大家懂的 所以转载务必保留出处 本文所有涉及到的大部分代码均在这个demo里面 h
  • 为何在新建STM工程中全局声明两个宏

    在uVision中新建STM32工程后 需要从STM32标准库中拷贝标准外设驱动到自己的工程目录中 此时需要在工程设置 gt C C 选项卡下的Define文本框中键入这两个全局宏定义 STM32F40 41xxx USE STDPERIP
  • stat 函数解析

    stat 函数的简单使用 stat 函数是用来获取文件的各种属性的一个linux下的常用API函数 函数原型为int stat const char path struct stat buf stat定义如下 struct stat dev
  • 【C++】运算符重载

    加号运算符重载 include
  • 牛客剑指offer刷题其他算法篇

    文章目录 构建乘积数组 题目 思路 代码实现 第一个只出现一次的字符
  • C 语言教程:数据类型和格式说明符

    C 语言中的数据类型 C 中的变量必须是指定的 数据类型 并且您必须在 printf 函数中使用 格式说明符 来显示它 创建变量 int myNum 5 整数 没有小数点 float myFloatNum 5 99 浮点数 char myL
  • C/C++编程中的算法实现技巧与案例分析

    C C 编程语言因其高效 灵活和底层的特性 被广大开发者用于实现各种复杂算法 本文将通过10个具体的算法案例 详细探讨C C 在算法实现中的技巧和应用 一 冒泡排序 Bubble Sort 冒泡排序 Bubble Sort 是一种简单的排序
  • C 语言运算符详解

    C 语言中的运算符 运算符用于对变量和值进行操作 在下面的示例中 我们使用 运算符将两个值相加 int myNum 100 50 虽然 运算符通常用于将两个值相加 就像上面的示例一样 它还可以用于将变量和值相加 或者将变量和另一个变量相加
  • C++ 字符串比较------strcmp函数和strncmp函数

    strcmp 函数原型 int strcmp const char str1 const char str2 功能 strcmp函数会按照字典顺序逐个比较两个字符串的字符 直到遇到不同的字符或者遇到字符串结束符 0 返回值 该函数返回值如下
  • C++ AVL树(四种旋转,插入)

    C AVL树 四种旋转 插入 一 AVL树的概念及性质 二 我们要实现的大致框架 1 AVL树的节点定义 2 AVL树的大致框架 三 插入 1 插入逻辑跟BST相同的那一部分 2 修改平衡因子
  • C++ 字符串比较------strcmp函数和strncmp函数

    strcmp 函数原型 int strcmp const char str1 const char str2 功能 strcmp函数会按照字典顺序逐个比较两个字符串的字符 直到遇到不同的字符或者遇到字符串结束符 0 返回值 该函数返回值如下
  • C++ 中 const 和 constexpr 关键字解析:常量、函数和指针

    很多 C 的初学者看到 const 这个关键字的第一反应都是一头雾水 主要是因为 const 可 以出现在很多的位置 以及后面加入的 constexpr 更是常常感到困惑 今天就为大家一一解释出现它们的含义和以及作用 const 关键字 c
  • 最大流-Dinic算法,原理详解,四大优化,详细代码

    文章目录 零 前言 一 概念回顾 可略过 1 1流网络 1 2流 1 3最大流 1 4残留网络 1 5增广路
  • 在 OS X 上的 virtualenv 中安装 scrapy 加密时发生错误 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我正在安装 scrapypip in virtualenv on OS X 10 11 当它安装密码学时 它说 buil

随机推荐

  • 使用pytorch训练自己的数据集

    一 introduction 不得不说pytorch的功能十分强大 其中torchvision datasets已经内置了常用的数据集 我们也可以使用datasets ImageFolder来加载我们自己的数据集 如果你觉得这两个方法都不能
  • c函数之gettimeofday()函数获取系统时间

    gettimeofday 使用C语言编写程序需要获得当前精确时间 1970年1月1日到现在的时间 或者为执行计时 可以使用gettimeofday 函数 函数原型 int gettimeofday struct timeval tv str
  • 将一个项目拉到自己电脑上运行

    目录 1 登录自己的git仓库 找到项目的链接 复制 2 在idea中 复制链接 克隆 3 为项目添加成maven项目 右键pom xml内容 maven下可选择add as maven 4 配置好maven
  • RK3399:WSL-Ubuntu16.04编译Android7.1 Industry

    RK3399 WSL Ubuntu16 04编译Android7 1 Industry 文章目录 RK3399 WSL Ubuntu16 04编译Android7 1 Industry 一 搭建WSL Ubuntu16 04 二 编译过程
  • NUC972 使用不同的FLASH开机的ENV文件写法 NAND...

    baudrate 115200 bootdelay 1 stderr serial stdin serial stdout serial setspi sf probe 0 30000000 loadkernel sf read 0x7fc
  • Kubernetes的yaml文件中的command使用

    前面说了init容器initContainers 这主要是为容器做前期准备工作的 一般都会用到shell脚本 这就会用到command 这里写command的用法 command就是将命令在创建的容器中执行 有这些命令去完成一些工作 com
  • vue动态添加图片,路径正确但加载不出来

    如下图在路径前加上require后 相对路径和绝对路径都能正常显示 div img div banner src require assets 426 jpg src require D demo src assets 2 jpg
  • [YOLO专题-20]:YOLO V5 - ultralytics代码解析-马赛克数据增强mosaic augment

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 122365378 目录 第1章 什么是
  • springboot集成redis

    springboot集成redis pom xml cachRedisUtil 缓存自动化配置 Controller Inter UserImpl Entity redis的配置application properties swagger运
  • 做了这么多年前端,将常见的报错bug总结出来贴给大家吧!

    gitee树形查看当前文档外链 1 JS语法 1 1 JS基础 1 1 1 报错 xxx is not defined 错误描述 什么xxx变量未定义 有问题代码 var arr 1 5 3 2 10 Arr push 100 分析 Unc
  • 获取input type=file的文件路径

    获取上传图片的url function getObjectURL file var url null if window createObjectURL undefined basic url window createObjectURL
  • python中的数组(Array)

    python中的数组 Array 在Python中 数组 Array 是一种有序的数据集合 用于存储固定数量的相同类型的元素 数组是一个连续的内存空间 可以按照索引访问和修改每个元素 特点 数组中的元素具有相同的数据类型 可以是数字 字符串
  • 徐升的算法笔记

    双指针 子数组 同向双指针 LC209 链表 a b为a指向b
  • await 与并行的区别

    1 只有一个任务 var a await MethodTask 执行时间10s Console WriteLine Result a 与 var t MethodTask 执行时间10s Console WriteLine Result a
  • 企业微信小程序一直在loading转圈

    企业小程序需要先注册企业微信并选定公司 否则在使用企业小程序模拟器插件时 会持续出现loading情况
  • python flask介绍

    python flask介绍 Flask是一个使用Python编写的轻量级Web应用框架 基于Werkzeug WSGI工具箱和Jinja2 模板引擎 Flask使用BSD授权 Flask也被称为 microframework 因为它使用简
  • 抓包工具大全整理

    一 使用Chrome的开发者工具 用Chrome捕获12306登录的POST请求 Chrome开发者工具在抓包时 如果页面发生了跳转 那么会把上一个页面的HTTP请求清空 此时需要选中Preserve log 以保留上次抓到的包 我们用Ch
  • react 字段值空判断_React原理解析第一篇:核心概念

    作为一个构建用户界面的库 React的核心始终围绕着更新这一个重要的目标 将更新和极致的用户体验结合起来是React团队一直在努力的事情 为什么React可以将用户体验做到这么好 我想这是基于以下两点原因 Fiber架构和Scheduler
  • IPv6扩展头部 (一) 扩展头部格式、类型与扩展选项

    之前几篇博客介绍了IPv6的扩展头部 包括分片头部和路由头部 接下来介绍一下IPv6扩展头部以及扩展选项的内容 可能会有这样的疑问 有了扩展头部怎么还需要扩展选项 扩展选项是干嘛用的 本篇博客就介绍相关内容 IPv6扩展头部 在IPv6中
  • SimpleDES

    转载 学习 http pigheadx me blog 2011 04 s desalgorithm 下面从准备知识开始 C 使用bitset数据结构进行与或位运算 1 置换 举例说明 对 ABCDEFGH 做一下 82641753 置换的