目前在金融界及非金融界的保密通信中,越来越多地用到了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. js的简单模板解析

    在编程中总是会遇见很多动态生成的东西,一般我们都是通过简单的html拼接起来的 function createHtml(name, phone, addr, email, imageSrc){ var ...

  2. 什么是券商PB业务

    PB业务(Prime Broker,主经纪商业务).所谓PB业务就是指向对冲基金等高端机构客户提供集中托管清算.后台运营.研究支持.杠杆融资.证券拆借.资金募集等一站式综合金融服务的统称.而该业务的基 ...

  3. oracle锁表解决方法

    SQL> select session_id from v$locked_object; SESSION_ID----------142 SQL> SELECT sid, serial#, ...

  4. eXtremeDB

    I am doing a cluster test, why did I encounter the ld errorwhen compiling the several packages from ...

  5. 用java具体代码实现分数(即有理数)四则运算

    用java具体代码实现分数(即有理数)四则运算 1,背景 Java老师布置了一个关于有理数运算的题目,因为参考书上有基本代码,所以自己主要是对书上代码做了一点优化,使其用户交互性更加友好以及代码封装性 ...

  6. WPS2012交叉引用技巧,word比wps这点强更新參考文献

                WPS2012交叉引用技巧,word比wps这点强更新參考文献 到时生成仅仅有有一条线,好像WPS不能够,word能够,假设谁知道能够补充.^_^ 1.写论文,參考文献的改动非 ...

  7. MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)

    MySQL主从复制(Master-Slave)即同步与读写分离(MySQL-Proxy)即集群

  8. [Angular 2] Rendering an Observable Date with the Async and Date Pipes

    Instead of simply pushing numbers on a timer into the template, now we'll move on to pushing actual ...

  9. txt文件导入mysql--转

    MySQL写入数据通常用insert语句,如 insert into person values(张三,20),(李四,21),(王五,70)…; 但有时为了更快速地插入大批量数据或交换数据,需要从文 ...

  10. Android组件系列----BroadcastReceiver广播接收器

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...