目前在金融界及非金融界的保密通信中,越来越多地用到了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 汇编语言的实现

  用汇编语言实现DES算法有它的优势也有它的难点。优势是51汇编的位操作可以方便地实现置换功能。但用汇编语言实现算法的迭代运算及循环功能比较烦琐。在用51汇编实现DES的过程中,我编写了几个子程序,组合起来可实现DES算法加密。在这里写出一些思路,有需要的同行可与我联系(E-mail:zhoubin@jlu.edu.cn)。

  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加密算法的更多相关文章

  1. 在.NET Core 里使用 BouncyCastle 的DES加密算法

    .NET Core上面的DES等加密算法要等到1.2 才支持,我们可是急需这个算法的支持,文章<使用 JavaScriptService 在.NET Core 里实现DES加密算法>需要用 ...

  2. 浅谈DES加密算法

    一.DES加密算法介绍 1.要求密钥必须是8个字节,即64bit长度 2.因为密钥是byte[8] , 代表字符串也可以是非可见的字节,可以与Base64编码算法一起使用 3.加密.解密都需要通过字节 ...

  3. JAVA使用DES加密算法加密解密

    程序中使用了.properties文件作为参数配置文档,好处是灵活配置各项参数 一旦对数据库的一些参数进行了配置,势必涉及数据库的IP,端口,用户名和密码 properties文件全是unicode编 ...

  4. 对称密码——DES加密算法

    前言 本篇博文将介绍对称密码算法中的DES密码的算法原理与代码实现(Java) DES算法原理 DES加密算法是对称加密算法(加密和解密使用同一个密钥)中的一种,DES也是分组密码,以64位为分组对明 ...

  5. des加密算法java&c#

    项目中用到的数据加密方式是ECB模式的DES加密得到的十六进制字符串.技术支持让写一个.net版的加密算法.这里做一下记录. java版: 16进制使用的是bouncycastle. import c ...

  6. android和.net webservice中的DES加密算法

    也是看了一堆的例子,本身并不会写加密算法,好在只要会用就行了,我们把在app中使用的参数加密,然后在.net端的webservice中进行解密,本身并没有什么问题,但是android下和.net下的d ...

  7. DES加密算法的C++实现

    <信息安全技术>这门课又在讲 DES 加密算法了,以前用纯C写过一次,这次我用 C++ 重新写了一个,写篇文章以备后用.本文介绍了 DES 算法加密的大致步骤和整体流程. 一.DES算法原 ...

  8. .net中DES加密算法研究

    /// <summary> /// DES加密算法 /// </summary> /// <param name="toEncrypt">要加密 ...

  9. 使用 JavaScriptService 在.NET Core 里实现DES加密算法

    文章<ASP.NET Core love JavaScript>和<跨平台的 NodeJS 组件解决 .NetCore 不支持 System.Drawing图形功能的若干问题> ...

随机推荐

  1. 自定义H5页面规范

    查看详情页也可支持自定义H5页面,用来展示更多内容. 交互规范 分屏切换,支持横向和竖向,滑动指引需清晰 若详情页加载较慢,需设计loading页,给予用户友好的提示 如有视频,需在底部加上“建议在W ...

  2. URL具体解释

    浏览器因特网资源:URL是浏览器寻找信息时所需的资源位置.通过URL.应用程序才干找到并使用共享因特网上大量的数据资源. 大部分URL都遵循一种标准的格式: ①HTTP协议(http://或者http ...

  3. Android 仿Win8的metro的UI界面(上)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/23441455 昨晚没事手机下载了一些APP,发现现在仿win8的主界面越来越多, ...

  4. java的练习

    import java.awt.GridLayout; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.s ...

  5. CSS3 target 伪类不得不说那些事儿(纯CSS实现tab切换)

    是不是觉得target有点眼熟?! 今天要讲的不是HTML的<a>标签里面有个target属性. target伪类是css3的新属性. 说到伪类,对css属性的人肯定都知道:hover.: ...

  6. android:http下载文件并保存到本地或SD卡

    想把文件保存到SD卡中,一定要知道SD卡的路径,获取SD卡路径: Environment.getExternalStorageDirectory() 另外,在保存之前要判断SD卡是否已经安装好,并且可 ...

  7. 如何在github上传自己的项目

    1.首先在github创建自己的账号. 2.下载github for windows 客户端 (备注:这里我的电脑是windows系统的) ,不要下载错了,网上下载的应该是这样的安装程序 3.安装gi ...

  8. iOS 天气应用代码中文介绍

    天气应用 解释请求参数 q: 表示Location(可以给出城市名字;或者直接给城市的经纬度) 例子:q=beijing 例子 q=48.834,2.394 num_of_days: 需要预报的天数 ...

  9. iOS9中通过UIStackView实现类似大众点评中的效果图

    效果图如下: 实现思路 整体可以看做为一个大的UIStackView(排列方式水平)包括一个子UIStackView(排列方式垂直),其中左边包括一个图片,右边的UIStackView中可以看做包括三 ...

  10. 武汉科技大学ACM :1003: 零起点学算法78——牛牛

    Problem Description 牛牛是一种纸牌游戏,总共5张牌,规则如下: 如果找不到3张牌的点数之和是10的倍数,则为没牛: 如果其中3张牌的点数之和是10的倍数,则为有牛,剩下两张牌的点数 ...