怎样将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
|