单片机汇编语言实现DES加密算法
目前在金融界及非金融界的保密通信中,越来越多地用到了DES算法。DES(Data Encryption Standard)即数据加密算法,是IBM公司于 1977年研究成功并公开发表的。随着我国三金工程尤其是金卡工程的启动,DES算法在POS、ATM、磁卡及智能卡(IC卡)中被广泛应用,以此来实现关键数据的保密。如信用卡持卡人的PIN的加密传输、IC卡与POS间的双向认证、金融交易中的密码键盘等,均用到DES算法。由于密码键盘不可能使用高级语言,所以用汇编语言实现DES就非常实用。
1 DES算法的简单原理
DES是一种分组密码。假定明文m是由0和1组成的长度为64位的符号串,密钥k也是64位的0、1符号串。
设:M=m1m2m3…m64
K=k1k2k3…k64
加密过程可表达如下:
DES(m)=IP-1·T16·T15…T2·T1·IP(m)
其中:IP(m)是初始置换,IP-1是逆置换,T16~T1是16次迭代。
(1)初始置换IP
功能是把输入的明文m按位重新组合,并把输出分为L0、R0两部分,每部分各长32位,其置换规则如下:
,,,,,,,, ,,,,,,,, ,,,,,,,, ,,,,,,,, ,,,,,, ,, ,,,,,,,, ,,,,,,,, ,,,,,,,
(2)逆置换IP-1
经过16次迭代运算后,得到L16、R16,将此作为输入,进行逆置换。逆置换满足:
IP·IP-1=IP-1·IP=I
逆置换正好是初始置换的逆运算。
(3)T16~T1的迭代计算
DES的迭代算法采用模2加法。
在通信网络的两端,双方约定了一致的密钥。在通信的源点用密钥对核心数据进行加密并形成密文,然后,以密文的形式在公共通信网中传输到通信网络的终点。数据到达终点后,用同样的密钥对密文数据进行解密,便再现了明文形式的核心数据。这样,便保证了核心数据(如PIN、MAC等)在公共通信网中传输的安全性和可靠性。
2 汇编语言的实现
8031有16个可以位寻址的寄存器,可放置128位的数据,利用它可实现DES的转置功能。将明文m放入寄存器27H~20H中,即位地址00H对应m64 ,3FH对应m1。利用标志寄存器C可实现置换与逆置换程序。在DES的16次迭代过程中,要实现公式:
Li=Ri-1;Ri=Li-1f(Ri-1,ki)
的运算过程,其关键在于f(Ri-1,ki)的功能。f是将32位的输入转化为32位的输出。其中含3项技术:
① 将32位膨胀为48位的E功能。该项功能可用类似于置换功能的子程序编写。
② 48位子密钥的生成。为了便于51汇编生成子密钥,可以使用主机用串口下传的方式,由主机将16个子密钥传给89C52为核心的单片机,然后存入80H~FFH中。如果密钥是固定的,则可直接将子密钥固化在89C52的Flash中。
③ S盒的功能是将48位的输入再次缩为32位。具体实现是将S盒表存入89C52的Flash中,每次通过查表求得S输出的结果。
下面列举其中的几个子程序。
(1)IP置换子程序
;入口寄存器:(MSB)2726252423222120(LSB),出口寄存器:(MSB)2F2E2D2C2B2A2928(LSB) ;功能:将入口寄存器的数据按置换表换位。 IP: MOV C,06H ;将m58送到进位标志中 MOV 7FH,C ;将进位标志送m1中 MOV C,0EH ;将m50送到进位标志中 MOV 7EH,C ;将进位标志送m2中 ;重复,按表编写 …… MOV C,31H ;将m15送到进位标志中 MOV 41H,C ;将进位标志送m63中 MOV C,39H ;将m7送到进位标志中 MOV 40H,C ;将进位标志送m64中 RET
(2)逆置换子程序
;入口寄存器:(MSB)2726252423222120(LSB),出口寄存器:(MSB)2F2E2D2C2B2A2928(LSB) ;功能:将入口寄存器的数据按逆置换表换位。 IPRVS:MOV C,18H ;将m40送到进位标志中 MOV 7FH,C ;将进位标志送m1中 MOV C,38H …… RET
(3)异或子程序
;入口寄存器:272625243F3E3D3C,出口寄存器:2B2A2928 ;功能:将寄存器27262524的内容和寄存器3F3E3D3C的内容异或。结果保存在2B2A2928寄存器中。 XORLF: MOV A,3FH ;将高8位异或XRL A,27H MOV 2BH,A ;放入出口处 MOV A,3EH XRL A,26H MOV 2AH,A MOV A,3DH XRL A,25H MOV 29H,A MOV A,3CH XRL A,24H MOV 28H,A RET
(4)S盒子程序
;入口寄存器:(MSB)2F2E2D2C2B2A2928,出口寄存器:(MSB)27262524 ;功能:48位→32位 S6TO4: MOV 20h,2FH ;取出高位数据 LCALL S162345 ;调用实现Si(b1b6,b2b3b4b5)的功能子程序 MOV DPTR,#S1TAB ;S盒表的首址 MOV A,21H ;取出第几个S盒 LCALL DPTRADD CLR A MOVC A,@A+DPTR ;求出S盒的表地址及S 结果 SWAP A MOV 27H,A ;保存高位结果 MOV 20H,2EH LCALL S162345 ;重复 RET
利用这些子程序,我们成功地开发了以89C52为核心单片机的密钥键盘,可用于金融系统的用户远程密码修改,也可用于其它商用密文的传输。
单片机汇编语言实现DES加密算法的更多相关文章
- 在.NET Core 里使用 BouncyCastle 的DES加密算法
.NET Core上面的DES等加密算法要等到1.2 才支持,我们可是急需这个算法的支持,文章<使用 JavaScriptService 在.NET Core 里实现DES加密算法>需要用 ...
- 浅谈DES加密算法
一.DES加密算法介绍 1.要求密钥必须是8个字节,即64bit长度 2.因为密钥是byte[8] , 代表字符串也可以是非可见的字节,可以与Base64编码算法一起使用 3.加密.解密都需要通过字节 ...
- JAVA使用DES加密算法加密解密
程序中使用了.properties文件作为参数配置文档,好处是灵活配置各项参数 一旦对数据库的一些参数进行了配置,势必涉及数据库的IP,端口,用户名和密码 properties文件全是unicode编 ...
- 对称密码——DES加密算法
前言 本篇博文将介绍对称密码算法中的DES密码的算法原理与代码实现(Java) DES算法原理 DES加密算法是对称加密算法(加密和解密使用同一个密钥)中的一种,DES也是分组密码,以64位为分组对明 ...
- des加密算法java&c#
项目中用到的数据加密方式是ECB模式的DES加密得到的十六进制字符串.技术支持让写一个.net版的加密算法.这里做一下记录. java版: 16进制使用的是bouncycastle. import c ...
- android和.net webservice中的DES加密算法
也是看了一堆的例子,本身并不会写加密算法,好在只要会用就行了,我们把在app中使用的参数加密,然后在.net端的webservice中进行解密,本身并没有什么问题,但是android下和.net下的d ...
- DES加密算法的C++实现
<信息安全技术>这门课又在讲 DES 加密算法了,以前用纯C写过一次,这次我用 C++ 重新写了一个,写篇文章以备后用.本文介绍了 DES 算法加密的大致步骤和整体流程. 一.DES算法原 ...
- .net中DES加密算法研究
/// <summary> /// DES加密算法 /// </summary> /// <param name="toEncrypt">要加密 ...
- 使用 JavaScriptService 在.NET Core 里实现DES加密算法
文章<ASP.NET Core love JavaScript>和<跨平台的 NodeJS 组件解决 .NetCore 不支持 System.Drawing图形功能的若干问题> ...
随机推荐
- 自定义H5页面规范
查看详情页也可支持自定义H5页面,用来展示更多内容. 交互规范 分屏切换,支持横向和竖向,滑动指引需清晰 若详情页加载较慢,需设计loading页,给予用户友好的提示 如有视频,需在底部加上“建议在W ...
- URL具体解释
浏览器因特网资源:URL是浏览器寻找信息时所需的资源位置.通过URL.应用程序才干找到并使用共享因特网上大量的数据资源. 大部分URL都遵循一种标准的格式: ①HTTP协议(http://或者http ...
- Android 仿Win8的metro的UI界面(上)
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/23441455 昨晚没事手机下载了一些APP,发现现在仿win8的主界面越来越多, ...
- java的练习
import java.awt.GridLayout; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.s ...
- CSS3 target 伪类不得不说那些事儿(纯CSS实现tab切换)
是不是觉得target有点眼熟?! 今天要讲的不是HTML的<a>标签里面有个target属性. target伪类是css3的新属性. 说到伪类,对css属性的人肯定都知道:hover.: ...
- android:http下载文件并保存到本地或SD卡
想把文件保存到SD卡中,一定要知道SD卡的路径,获取SD卡路径: Environment.getExternalStorageDirectory() 另外,在保存之前要判断SD卡是否已经安装好,并且可 ...
- 如何在github上传自己的项目
1.首先在github创建自己的账号. 2.下载github for windows 客户端 (备注:这里我的电脑是windows系统的) ,不要下载错了,网上下载的应该是这样的安装程序 3.安装gi ...
- iOS 天气应用代码中文介绍
天气应用 解释请求参数 q: 表示Location(可以给出城市名字;或者直接给城市的经纬度) 例子:q=beijing 例子 q=48.834,2.394 num_of_days: 需要预报的天数 ...
- iOS9中通过UIStackView实现类似大众点评中的效果图
效果图如下: 实现思路 整体可以看做为一个大的UIStackView(排列方式水平)包括一个子UIStackView(排列方式垂直),其中左边包括一个图片,右边的UIStackView中可以看做包括三 ...
- 武汉科技大学ACM :1003: 零起点学算法78——牛牛
Problem Description 牛牛是一种纸牌游戏,总共5张牌,规则如下: 如果找不到3张牌的点数之和是10的倍数,则为没牛: 如果其中3张牌的点数之和是10的倍数,则为有牛,剩下两张牌的点数 ...