怎样将DES加密、解密的汇编程序转变为C语言的程序?
哪位大侠精通汇编和C51,看能否将下面一段DES加密、解密的函数转变为C51的,函数能有入口参数、出口参数,需要的密钥参数。
这段汇编函数我在KEIL里面编译通过了。
;---------------------------------------------------------------
; DES加密解密算法
;---------------------------------------------------------------
NAME DES64
; PUBLIC DESMETHOD
;DESCONST SEGMENT CODE
;DES64 SEGMENT CODE
; RSEG DESCONST
;---------------------------------------------------------------
; 初始置换表,共64B
;---------------------------------------------------------------
Data_IP: DB 58,50,42,34,26,18,10,2
DB 60,52,44,36,28,20,12,4
DB 62,54,46,38,30,22,14,6
DB 64,56,48,40,32,24,16,8
DB 57,49,41,33,25,17, 9,1
DB 59,51,43,35,27,19,11,3
DB 61,53,45,37,29,21,13,5
DB 63,55,47,39,31,23,15,7
;---------------------------------------------------------------
; 终止置换表,共64B
;---------------------------------------------------------------
Data_FP:
DB 40,8,48,16,56,24,64,32
DB 39,7,47,15,55,23,63,31
DB 38,6,46,14,54,22,62,30
DB 37,5,45,13,53,21,61,29
DB 36,4,44,12,52,20,60,28
DB 35,3,43,11,51,19,59,27
DB 34,2,42,10,50,18,58,26
DB 33,1,41, 9,49,17,57,25
;---------------------------------------------------------------
; 扩充置换表,共48B
;---------------------------------------------------------------
DATA_EP: DB 32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9
DB 8, 9,10,11,12,13,12,13,14,15,16,17
DB 16,17,18,19,20,21,20,21,22,23,24,25
DB 24,25,26,27,28,29,28,29,30,31,32, 1
;---------------------------------------------------------------
; PBOX置换表,共32B
;---------------------------------------------------------------
Data_PBox: DB 16,7,20,21,29,12,28,17, 1,15,23,26, 5,18,31,10
DB 2,8,24,14,32,27, 3, 9,19,13,30, 6,22,11, 4,25
;---------------------------------------------------------------
; SBOX置换表,共256B
;---------------------------------------------------------------
Data_SBox: DB 0E4H,0D1H,02FH,0B8H,03AH,06CH,059H,007H
DB 00FH,074H,0E2H,0D1H,0A6H,0CBH,095H,038H
DB 041H,0E8H,0D6H,02BH,0FCH,097H,03AH,050H
DB 0FCH,082H,049H,017H,05BH,03EH,0A0H,06DH
DB 0F1H,08EH,06BH,034H,097H,02DH,0C0H,05AH
DB 03DH,047H,0F2H,08EH,0C0H,01AH,069H,0B5H
DB 00EH,07BH,0A4H,0D1H,058H,0C6H,093H,02FH
DB 0D8H,0A1H,03FH,042H,0B6H,07CH,005H,0E9H
DB 0A0H,09EH,063H,0F5H,01DH,0C7H,0B4H,028H
DB 0D7H,009H,034H,06AH,028H,05EH,0CBH,0F1H
DB 0D6H,049H,08FH,030H,0B1H,02CH,05AH,0E7H
DB 01AH,0D0H,069H,087H,04FH,0E3H,0B5H,02CH
DB 07DH,0E3H,006H,09AH,012H,085H,0BCH,04FH
DB 0D8H,0B5H,06FH,003H,047H,02CH,01AH,0E9H
DB 0A6H,090H,0CBH,07DH,0F1H,03EH,052H,084H
DB 03FH,006H,0A1H,0D8H,094H,05BH,0C7H,02EH
DB 02CH,041H,07AH,0B6H,085H,03FH,0D0H,0E9H
DB 0EBH,02CH,047H,0D1H,050H,0FAH,039H,086H
DB 042H,01BH,0ADH,078H,0F9H,0C5H,063H,00EH
DB 0B8H,0C7H,01EH,02DH,06FH,009H,0A4H,053H
DB 0C1H,0AFH,092H,068H,00DH,034H,0E7H,05BH
DB 0AFH,042H,07CH,095H,061H,0DEH,00BH,038H
DB 09EH,0F5H,028H,0C3H,070H,04AH,01DH,0B6H
DB 043H,02CH,095H,0FAH,0BEH,017H,060H,08DH
DB 04BH,02EH,0F0H,08DH,03CH,097H,05AH,061H
DB 0D0H,0B7H,049H,01AH,0E3H,05CH,02FH,086H
DB 014H,0BDH,0C3H,07EH,0AFH,068H,005H,092H
DB 06BH,0D8H,014H,0A7H,095H,00FH,0E2H,03CH
DB 0D2H,084H,06FH,0B1H,0A9H,03EH,050H,0C7H
DB 01FH,0D8H,0A3H,074H,0C5H,06BH,00EH,092H
DB 07BH,041H,09CH,0E2H,006H,0ADH,0F3H,058H
DB 021H,0E7H,04AH,08DH,0FCH,090H,035H,06BH
;---------------------------------------------------------------
; 密钥第一置换表,共56B
; 56-56位密钥置换表
;---------------------------------------------------------------
KEY_PC1: DB 50, 43, 36, 29, 22, 15, 08, 01
DB 51, 44, 37, 30, 23, 16, 09, 02
DB 52, 45, 38, 31, 24, 17, 10, 03
DB 53, 46, 39, 32, 56, 49, 42, 35
DB 28, 21, 14, 07, 55, 48, 41, 34
DB 27, 20, 13, 06, 54, 47, 40, 33
DB 26, 19, 12, 05, 25, 18, 11, 04
;64-56位密钥置换表
; DB 57,49,41,33,25,17, 9, 1,58,50,42,34,26,18
; DB 10, 2,59,51,43,35,27,19,11, 3,60,52,44,36
; DB 63,55,47,39,31,23,15, 7,62,54,46,38,30,22
; DB 14, 6,61,53,45,37,29,21,13, 5,28,20,12, 4
;---------------------------------------------------------------
; 密钥第二置换表,共48B
;---------------------------------------------------------------
KEY_PC2: DB 14,17,11,24,01,05,03,28,15,06,21,10
DB 23,19,12,04,26,08,16,07,27,20,13,02
DB 41,52,31,37,47,55,30,40,51,45,33,48
DB 44,49,39,56,34,53,46,42,50,36,29,32
;---------------------------------------------------------------
; 密钥16次循环移位次数表,共16B
;---------------------------------------------------------------
SHIFTBITS: DB 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1
; RSEG DES64
USING 0
这段汇编函数我在KEIL里面编译通过了。
;---------------------------------------------------------------
; DES加密解密算法
;---------------------------------------------------------------
NAME DES64
; PUBLIC DESMETHOD
;DESCONST SEGMENT CODE
;DES64 SEGMENT CODE
; RSEG DESCONST
;---------------------------------------------------------------
; 初始置换表,共64B
;---------------------------------------------------------------
Data_IP: DB 58,50,42,34,26,18,10,2
DB 60,52,44,36,28,20,12,4
DB 62,54,46,38,30,22,14,6
DB 64,56,48,40,32,24,16,8
DB 57,49,41,33,25,17, 9,1
DB 59,51,43,35,27,19,11,3
DB 61,53,45,37,29,21,13,5
DB 63,55,47,39,31,23,15,7
;---------------------------------------------------------------
; 终止置换表,共64B
;---------------------------------------------------------------
Data_FP:
DB 40,8,48,16,56,24,64,32
DB 39,7,47,15,55,23,63,31
DB 38,6,46,14,54,22,62,30
DB 37,5,45,13,53,21,61,29
DB 36,4,44,12,52,20,60,28
DB 35,3,43,11,51,19,59,27
DB 34,2,42,10,50,18,58,26
DB 33,1,41, 9,49,17,57,25
;---------------------------------------------------------------
; 扩充置换表,共48B
;---------------------------------------------------------------
DATA_EP: DB 32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9
DB 8, 9,10,11,12,13,12,13,14,15,16,17
DB 16,17,18,19,20,21,20,21,22,23,24,25
DB 24,25,26,27,28,29,28,29,30,31,32, 1
;---------------------------------------------------------------
; PBOX置换表,共32B
;---------------------------------------------------------------
Data_PBox: DB 16,7,20,21,29,12,28,17, 1,15,23,26, 5,18,31,10
DB 2,8,24,14,32,27, 3, 9,19,13,30, 6,22,11, 4,25
;---------------------------------------------------------------
; SBOX置换表,共256B
;---------------------------------------------------------------
Data_SBox: DB 0E4H,0D1H,02FH,0B8H,03AH,06CH,059H,007H
DB 00FH,074H,0E2H,0D1H,0A6H,0CBH,095H,038H
DB 041H,0E8H,0D6H,02BH,0FCH,097H,03AH,050H
DB 0FCH,082H,049H,017H,05BH,03EH,0A0H,06DH
DB 0F1H,08EH,06BH,034H,097H,02DH,0C0H,05AH
DB 03DH,047H,0F2H,08EH,0C0H,01AH,069H,0B5H
DB 00EH,07BH,0A4H,0D1H,058H,0C6H,093H,02FH
DB 0D8H,0A1H,03FH,042H,0B6H,07CH,005H,0E9H
DB 0A0H,09EH,063H,0F5H,01DH,0C7H,0B4H,028H
DB 0D7H,009H,034H,06AH,028H,05EH,0CBH,0F1H
DB 0D6H,049H,08FH,030H,0B1H,02CH,05AH,0E7H
DB 01AH,0D0H,069H,087H,04FH,0E3H,0B5H,02CH
DB 07DH,0E3H,006H,09AH,012H,085H,0BCH,04FH
DB 0D8H,0B5H,06FH,003H,047H,02CH,01AH,0E9H
DB 0A6H,090H,0CBH,07DH,0F1H,03EH,052H,084H
DB 03FH,006H,0A1H,0D8H,094H,05BH,0C7H,02EH
DB 02CH,041H,07AH,0B6H,085H,03FH,0D0H,0E9H
DB 0EBH,02CH,047H,0D1H,050H,0FAH,039H,086H
DB 042H,01BH,0ADH,078H,0F9H,0C5H,063H,00EH
DB 0B8H,0C7H,01EH,02DH,06FH,009H,0A4H,053H
DB 0C1H,0AFH,092H,068H,00DH,034H,0E7H,05BH
DB 0AFH,042H,07CH,095H,061H,0DEH,00BH,038H
DB 09EH,0F5H,028H,0C3H,070H,04AH,01DH,0B6H
DB 043H,02CH,095H,0FAH,0BEH,017H,060H,08DH
DB 04BH,02EH,0F0H,08DH,03CH,097H,05AH,061H
DB 0D0H,0B7H,049H,01AH,0E3H,05CH,02FH,086H
DB 014H,0BDH,0C3H,07EH,0AFH,068H,005H,092H
DB 06BH,0D8H,014H,0A7H,095H,00FH,0E2H,03CH
DB 0D2H,084H,06FH,0B1H,0A9H,03EH,050H,0C7H
DB 01FH,0D8H,0A3H,074H,0C5H,06BH,00EH,092H
DB 07BH,041H,09CH,0E2H,006H,0ADH,0F3H,058H
DB 021H,0E7H,04AH,08DH,0FCH,090H,035H,06BH
;---------------------------------------------------------------
; 密钥第一置换表,共56B
; 56-56位密钥置换表
;---------------------------------------------------------------
KEY_PC1: DB 50, 43, 36, 29, 22, 15, 08, 01
DB 51, 44, 37, 30, 23, 16, 09, 02
DB 52, 45, 38, 31, 24, 17, 10, 03
DB 53, 46, 39, 32, 56, 49, 42, 35
DB 28, 21, 14, 07, 55, 48, 41, 34
DB 27, 20, 13, 06, 54, 47, 40, 33
DB 26, 19, 12, 05, 25, 18, 11, 04
;64-56位密钥置换表
; DB 57,49,41,33,25,17, 9, 1,58,50,42,34,26,18
; DB 10, 2,59,51,43,35,27,19,11, 3,60,52,44,36
; DB 63,55,47,39,31,23,15, 7,62,54,46,38,30,22
; DB 14, 6,61,53,45,37,29,21,13, 5,28,20,12, 4
;---------------------------------------------------------------
; 密钥第二置换表,共48B
;---------------------------------------------------------------
KEY_PC2: DB 14,17,11,24,01,05,03,28,15,06,21,10
DB 23,19,12,04,26,08,16,07,27,20,13,02
DB 41,52,31,37,47,55,30,40,51,45,33,48
DB 44,49,39,56,34,53,46,42,50,36,29,32
;---------------------------------------------------------------
; 密钥16次循环移位次数表,共16B
;---------------------------------------------------------------
SHIFTBITS: DB 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1
; RSEG DES64
USING 0
...全文
相关推荐
DES加密解密算法的C语言实现
DES 加密解密算法的 C 语言实现本文档介绍了 DES 加密解密算法的 C 语言实现,提供了完整的源代码,能够加密字符串或者文件,已经通过测试使用。
DES加密解密算法(可加解密中文字符)(C语言实现)
该项目采用C语言实现了DES加密与解密算法,支持8字节明文和密钥的加解密操作,包含初始置换、16轮迭代、F函数处理、子密钥生成及逆置换等核心流程。代码结构清晰,具备完整的DES算法组件,可用于数据安全
DES 加密解密 ( C语言实现 )
DES,即Data Encryption Standard,是数据加密标准,是一种广泛使用的对称加密算法。在这个主题中,我们将探讨如何使用C语言来实现DES加密和解密的过程。
DES加密解密算法 C语言源代码
这篇C语言源代码实现了DES加密解密算法,特别适合于资源有限的环境,如STM32或51单片机。STM32系列是基于ARM Cortex-M内核的微控制器,而51单片机则是早期广泛应用的8位微处理器。
des加密解密(java和c语言互通)
在“Java与c语言 DES加密互通”项目中,开发者可能已经创建了跨语言的API或接口,使得Java程序能够通过网络或文件系统与C语言程序交互,共享加密或解密的结果。


