数据加密标准DES硬件实现(Modelsim)

数据加密标准DES硬件实现

  • 本文内容摘要
  • 理论依据和设计内容
  • 仿真结果
  • 整体代码

本文内容摘要

  本文设计并验证了DES的密钥扩展通路,分别采用Round Based方法Pipeline方法两种方式设计并验证DES的明文通路

理论依据和设计内容

  首先,要了解分组密码算法及DES密码。
  密码体制中两种基本方法:扩散和混淆扩散是使小的扰动影响波及全局,即让明文中的每一位影响密文中的许多位。而混淆是使密文与密钥之间的统计关系尽可能的复杂,使攻击者难以从密文推测出密钥,如使用复杂的非线性变换。
  DES对于明文的处理经过三个阶段:

  1. 一是让64bit明文经过初始置换进行比特重排,此阶段不使用密钥
  2. 二是进行16次与密钥相关的加密运算,即置换和替代;
  3. 三是最后一次循环64bit,经过逆初始置换得到,此阶段也不用密钥。

  上述流程如下图所示。
DES加密处理流程图
  DES的密钥为64bit,其中56位为随机生成的二进制码,8位为算法不使用的校验位,如奇偶校验位。DES实现过程中需要一个密钥通路负责产生所需的每一次加密子密钥信息,具体流程图如下图所示。

DES具体流程图
  初始置换IP是对64bit的明文(8×8的矩阵)进行置换移位操作:即将某些位置替换到新的位置上,生成一个重新排列的矩阵表。逆初始置换IP-1即为反向操作。具体操作如下图所示。
初始置换/逆初始变换具体操作图
  之后需要进行16此轮变换:其用到了两个函数,如下图所示。
轮变换函数

  具体操作如下图所示。
轮变换流程图
  然后需要用到扩展运算操作,将32位扩展到48位。之后需要用到SBox函数,其是非线性变换,不易于数学分析提供了更好的安全性。最后进行P置换则可得到此部分输出。
  随后进行密钥通路等操作,经过一系列操作对56位有效密钥位进行变换最终生成48位。整个DES加密的流程图如下图所示:
DES加密整体流程图
  F变换流程如下图所示。
f变换流程图

仿真结果

  测试数据为输入明文64bit的0,输入密钥为64bit的0。此时输出为8CA64DE9C1B123A7。如下图所示:当输入均为设定值后,start输入一个脉冲,此时加密模块读入数据开始进行加密,经过16轮迭代变换后输出最终密文,为64bit数据8CA64DE9C1B123A7,与正确值相符,证明模块正确。
仿真测试波形图
  此外,我创建了一个新的窗口以观察des执行内部所有信号数据值。如下图所示,其中Fout为每一轮f变换中P盒置换得到的32高位数据;FP为每一轮最终迭代运算后的输出值;Rtmp记录了每一轮f变换内的置换后低32位数据。由此波形图可以更清晰地观察到des加密运行中的计算,也更便于在出错时寻找出错位置。
仿真测试波形图2
  下面测试流水线型方式的DES加密模块,如下图所示,可以看到,当使能信号脉冲到来后,DES读入有效输入数据并开始进行加密计算,等待一段时间后计算完成并输出密文。
仿真测试波形图3

整体代码

代码见资源,包含顶层代码、加密读写代码和激励测试代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/285039.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

react点击事件

使用事件对象传参 //按钮 <button onClick{thisClick}>点击事件</button> //方法 const thisClick (e) >{console.log(这里是点击结果,e)} 输出结果 传递自定义参数 //按钮 <button onClick{()>thisClick(参数)}>点击事件</button> //方法 c…

大数据Doris(三十八):Aggregate 和 Uniq 模型中的 ROLLUP

文章目录 Aggregate 和 Uniq 模型中的 ROLLUP 一、获得每个用户的总消费

云原生之深入解析Thanos在EKS多集群架构上存储多个集群Prometheus

一、前言 随着 HiredScore 的产品和客户群越来越大&#xff0c;已经开始向 Kubernetes 过渡并迅速采用它&#xff0c;它是我们重要的障碍之一&#xff0c;也可能是最大的监控基础设施。我们在使用 Prometheus / Grafana 堆栈进行监控方面有一些经验&#xff0c;了解到希望创建…

得帆信息创始人-张桐,受邀出席 BV百度风投AIGC主题论坛

近日&#xff0c;得帆信息创始人兼CEO张桐&#xff0c;作为百度风投被投代表企业创始人受邀出席“向未来&#xff0c;共成长” BV百度风投AIGC主题论坛。 与包括上海市徐汇区相关部门领导、百度集团相关事业部负责人及代表&#xff0c;以及来自国寿资本、中网投、麦顿投资的投资…

YOLOV5 数据集的划分的详细流程(超详细)

1 数据划分 标注好后的数据集分为两个文件夹&#xff0c;一个文件夹中放置图片另一个文件夹中放置了txt文件。将数据集按照一定的比例进行划分为训练集&#xff0c;测试集&#xff0c;验证集&#xff08;train、test、val&#xff09;&#xff0c;下述的代码中我按照了 8:1:1 的…

php-使用wangeditor实现富文本(完成图片上传)-npm

官网参考连接&#xff1a;快速开始 | wangEditor 样式&#xff1a; 一、新建一个临时文件夹test1和一个文件夹wangeditor 临时文件夹test1&#xff1a;临时存放通过npm下载的文件文件夹wangeditor&#xff1a;用于存放在临时文件夹test1拷贝的css和js 二、安装 editor 在确保有…

云原生之深入解析如何在K8S环境中使用Prometheus来监控CoreDNS指标

一、什么是 Kubernetes CoreDNS&#xff1f; CoreDNS 是 Kubernetes 环境的DNS add-on 组件&#xff0c;它是在控制平面节点中运行的组件之一&#xff0c;使其正常运行和响应是 Kubernetes 集群正常运行的关键。DNS 是每个体系结构中最敏感和最重要的服务之一。应用程序、微服…

去掉乘法的加法神经网络

AdderNet: Do We Really Need Multiplications in Deep Learning? 核心贡献 用filter与input feature之间的L1-范数距离作为“卷积层”的输出为了提升模型性能&#xff0c;提出全精度梯度的反向传播方法根据不同层的梯度级数&#xff0c;提出自适应学习率策略 研究动机 加…

1.[BUU][极客大挑战 2019]EasySQL1

1.了解万能密码--》1 or 11# 这是一种常见的SQL注入攻击。在一个SQL查询中&#xff0c;这个语句会导致条件始终为真&#xff08;11&#xff09;&#xff0c;因此查询会返回所有的结果。#表示注释&#xff0c;可以用来结束SQL语句&#xff0c;防止后续的部分执行。因此&#xf…

HTML_CSS的基本选择器的使用及其作用范围和优先级

目录 ✨CSS的使用&#xff1a;行内样式内部样式外部样式 ✨CSS基本选择器&#xff1a;id选择器class选择器标签选择器 ✨优先级&#xff1a;选择器的优先级样式表的优先级 ✨CSS的使用&#xff1a; 根据定义CSS的位置不同&#xff0c;分为行内样式、内部样式和外部样式 行内样…

【目标检测】视频输出体积太大?分析视频的编码与码率问题

在做视频目标检测时&#xff0c;发现一个问题&#xff0c;检测输出完的视频时大时小&#xff0c;有时输出体积过大&#xff0c;造成播放器播放时严重卡顿现象。本文就这一情况进行分析&#xff0c;并就该问题提出相关解决方案。 视频基础知识 隔行扫描和逐行扫描 早期电视台在…

Unity与Android交互通信系列(2)

在上一篇文章中&#xff0c;我们介绍了Unity和Android交互通信的原理及在Unity中直接调用Java代码的方式&#xff0c;但没有给出代码示例&#xff0c;下面通过实际例子演示上篇文章中AndroidJavaClass、AndroidJavaObject两个类的基本用法&#xff0c;由于交互通信涉及到两端&a…