标准DES算法430源程序

源代码在线查看: 标准des算法430源程序.txt

软件大小: 3 K
上传用户: ytcehui
关键词: DES 430 标准 算法
下载地址: 免注册下载 普通下载 VIP

相关代码

				//标准DES算法430源程序.分为2个子程序:"子密钥DES_KEY";"加密/解密DES_MAIN".
				//DES_test为试验主程序.
				//采用试验数据时加密解密计算周期大约为58658个,在1MHZ的MCLK下大约要58ms
				//使用R4,R5,R6,R7,r8. 及24个内存.280H~287H输入,288H~28FH缓冲,290H~297H输出
				//包括DES_test在内,ROM用量近2K。flashROM的1080H~10DFH单元存放子密钥结果
				
				#include "msp430x41x.h"
				
				#define PTPOI R6 //交换表指针
				#define PTBYTP R7 //输入表字节索引值
				#define PTBITC R8 //输入表位(bit)索引值
				
				PTIN DEFINE 280H //
				PTOUT DEFINE 290H 
				DES_BUFFER DEFINE 288H 
				#define DES_KEY_CNT 2A0H 
				#define DES_CNT 2A0H //与上面使用同一单元
				SFRW RAMFLAG3 =2A2H //位标志寄存器 
				#define FLAG_DES2 0002H,&RAMFLAG3 //
				#define FLAG_DES1 0001H,&RAMFLAG3 //
				#define FLAG_DES3 0004H,&RAMFLAG3 //0=加密;1=解密
				
				ORG 0E000H
				RESET MOV.W #300H,SP // Initialize stackpointer
				mov #WDTPW+WDTHOLD,&WDTCTL // Stop Watchdog Timer 
				
				mov #200h,R4 //RAM初始化
				RCL MOV.W #1111H , 0(R4)
				INCD R4 //
				CMP #2FFH,R4
				JLO RCL 
				// 
				DES_Test
				MOV #1080H,R4 //
				CALL #CLEARFLASH //
				
				MOV.B #01100011B , PTIN //63 computer 初始化:放好密码原文
				MOV.B #01101111B , PTIN+1 //6f
				MOV.B #01101101B , PTIN+2 //6d
				MOV.B #01110000B , PTIN+3 //70
				MOV.B #01110101B , PTIN+4 //75
				MOV.B #01110100B , PTIN+5 //74
				MOV.B #01100101B , PTIN+6 //65
				MOV.B #01110010B , PTIN+7 //72
				CALL #DES_KEY //计算子密钥,结果在Flash1080H~10DFH单元。
				
				MOV.B #01101100B , PTIN //6c learning 初始化:要加密的数据
				MOV.B #01100101B , PTIN+1 //65
				MOV.B #01100001B , PTIN+2 //61
				MOV.B #01110010B , PTIN+3 //72
				MOV.B #01101110B , PTIN+4 //6e
				MOV.B #01101001B , PTIN+5 //69
				MOV.B #01101110B , PTIN+6 //6e
				MOV.B #01100111B , PTIN+7 //67
				BIC #FLAG_DES3 //加密
				CALL #DES_MAIN
				NOP //加密结束,结果在290H单元:89 4c b7 32 df 9d e1 03
				
				MOV.W PTOUT , PTIN
				MOV.W PTOUT+2 , PTIN+2
				MOV.W PTOUT+4 , PTIN+4
				MOV.W PTOUT+6 , PTIN+6
				BIS #FLAG_DES3 //解密
				CALL #DES_MAIN
				nop //解密结束,结果在290H单元:6c 65 61 72 6e 69 6e 67
				
				JMP $ //子程序结束*****************************
				//***********************************************************
				DES_MAIN //加密/解密子程序
				MOV #IP,PTPOI // R6 
				CALL #PERMUT // 
				MOV.B #00H , DES_CNT // 
				
				MOV.W PTOUT,DES_BUFFER //
				MOV.W PTOUT+2,DES_BUFFER+2
				MOV.W PTOUT+4,DES_BUFFER+4 //
				MOV.W PTOUT+6,DES_BUFFER+6
				
				DES1 MOV.W DES_BUFFER+4,PTIN // 
				MOV.W DES_BUFFER+6,PTIN+2
				
				MOV #DES_E,PTPOI // R6 
				CALL #PERMUT 
				
				MOV.B DES_CNT , R5
				BIT #FLAG_DES3 
				JZ DES11 
				MOV.B #15 , R6 
				SUB.B R5 , R6 
				MOV.B R6 ,R5 
				
				DES11 MOV.B TAB_DESKEY(R5) , R6
				XOR.W 1000H(R6) , PTOUT 
				XOR.W 1002H(R6) , PTOUT+2 
				XOR.W 1004H(R6) , PTOUT+4 
				// 试验结果为 F0 A9 10 6A 39 68 .
				
				//S1处理********************************************
				MOV.B PTOUT , R5
				RRA.B R5
				RRA.B R5
				BIC.B #0C0H, R5 //
				MOV.B DES_S1(R5),R5
				MOV.B R5 , PTIN
				MOV.B PTOUT+1 , R5
				MOV.B PTOUT , R4
				RRC.B R4
				RRC.B R5
				RRC.B R4
				RRC.B R5
				RRC.B R4
				RRC.B R5
				RRC.B R4
				RRC.B R5
				BIC.B #0C0H, R5 //
				MOV.B DES_S2(R5),R5
				ADD.B R5 , PTIN
				MOV.B PTOUT+1 , R5
				MOV.B PTOUT+2 , R4
				RLC.B R4
				RLC.B R5
				RLC.B R4
				RLC.B R5
				BIC.B #0C0H, R5 //
				MOV.B DES_S3(R5),R5
				MOV.B R5 , PTIN+1
				MOV.B PTOUT+2 , R5
				BIC.B #0C0H, R5 //
				//MOV.W DES_S4,R4
				MOV.B DES_S4(R5),R5
				ADD.B R5 , PTIN+1 
				//***************** S盒处理的方法太笨拙了,可以考虑循环:S1,S4--s5,s8 
				//S5处理
				MOV.B PTOUT+3 , R5
				RRA.B R5
				RRA.B R5
				BIC.B #0C0H, R5 //
				MOV.B DES_S5(R5),R5
				MOV.B R5 , PTIN+2
				MOV.B PTOUT+4 , R5
				MOV.B PTOUT+3 , R4
				RRC.B R4
				RRC.B R5
				RRC.B R4
				RRC.B R5
				RRC.B R4
				RRC.B R5
				RRC.B R4
				RRC.B R5
				BIC.B #0C0H, R5 //
				MOV.B DES_S6(R5),R5
				ADD.B R5 , PTIN+2
				MOV.B PTOUT+4 , R5
				MOV.B PTOUT+5 , R4
				RLC.B R4
				RLC.B R5
				RLC.B R4
				RLC.B R5
				BIC.B #0C0H, R5 //
				MOV.B DES_S7(R5),R5
				MOV.B R5 , PTIN+3
				MOV.B PTOUT+5 , R5
				BIC.B #0C0H, R5 //
				//MOV.W DES_S4,R4
				MOV.B DES_S8(R5),R5
				ADD.B R5 , PTIN+3 
				// 至此,试验结果为: 5B 41 03 D9
				
				MOV #DES_P,PTPOI //
				CALL #PERMUT // 
				//至此, 试验结果为: ca 39 e8 03
				
				XOR.W DES_BUFFER , PTOUT //
				XOR.W DES_BUFFER+2 , PTOUT+2 // 
				
				MOV.W DES_BUFFER+4 , DES_BUFFER // 
				MOV.W DES_BUFFER+6 , DES_BUFFER+2 //
				MOV.W PTOUT , DES_BUFFER+4 //
				MOV.W PTOUT+2 , DES_BUFFER+6
				
				INC.B DES_CNT //
				CMP.B #16 , DES_CNT //LOOP again???
				JLO DES1
				
				MOV.W DES_BUFFER , PTIN+4
				MOV.W DES_BUFFER+2 , PTIN+6
				MOV.W DES_BUFFER+4 , PTIN
				MOV.W DES_BUFFER+6 , PTIN+2
				MOV #DES_IP1,PTPOI // 
				CALL #PERMUT // 
				
				RET //子程序结束 ****************************
				//****************************************************************************
				//密码原文在280H~287H单元,结果:1080H~10DFH单元,每6个字节为一个密码。
				DES_KEY 
				MOV.B #00H , DES_KEY_CNT
				BIC #FLAG_DES1 //
				
				MOV #PC1,PTPOI //R6 
				CALL #PERMUT //
				
				DES_KEY1 //
				MOV.W PTOUT,PTIN // 
				MOV.W PTOUT+2,PTIN+2 //
				MOV.W PTOUT+4,PTIN+4
				MOV.W PTOUT+6,PTIN+6
				
				DES_KEY2 //
				MOV.B PTIN+3,R6 //
				RLC.B PTIN+3
				RLC.B PTIN+2 //
				RLC.B PTIN+1
				RLC.B PTIN
				BIC.B #10H,PTIN+3 //该命令保持c标志位不变
				JNC DES_KEY01 // 
				BIS.B #10H,PTIN+3
				DES_KEY01
				BIC.B #0FH,PTIN+3 //
				MOV.B PTIN+3,R7 // 
				MOV.B R6,PTIN+3 //
				RLC.B PTIN+6
				RLC.B PTIN+5
				RLC.B PTIN+4
				RLC.B PTIN+3
				BIC.B #01H,PTIN+6 //
				BIT.B #10H,PTIN+3
				JZ DES_KEY02 //
				BIS.B #01H,PTIN+6
				DES_KEY02
				BIC.B #0F0H,PTIN+3
				ADD.B R7,PTIN+3 //移位处理结束。结果仍在280H~286H单元
				
				BIT #FLAG_DES1
				JZ DES_KEY03
				BIC #FLAG_DES1
				JMP DES_KEY2 //再循环一次
				
				DES_KEY03 // 
				MOV.W PTIN,DES_BUFFER 
				MOV.W PTIN+2,DES_BUFFER+2 
				MOV.W PTIN+4,DES_BUFFER+4
				MOV.B PTIN+6,DES_BUFFER+6 
				CLR.B PTIN+7
				
				MOV #PC2,PTPOI //PC2交换
				CALL #PERMUT //
				//写字密钥到Flash ROM
				MOV.B DES_KEY_CNT,R5
				MOV.B TAB_DESKEY(R5),R6 //
				ADD.W #1000H , R6
				MOV #PTOUT,R5
				MOV #6,R4
				CALL #WREEROM 
				
				MOV.W DES_BUFFER,PTIN //
				MOV.W DES_BUFFER+2,PTIN+2
				MOV.W DES_BUFFER+4,PTIN+4
				MOV.W DES_BUFFER+6,PTIN+6
				
				BIS #FLAG_DES1 //
				INC.B DES_KEY_CNT
				CMP.B #1 , DES_KEY_CNT
				JEQ DES_KEY3
				CMP.B #8 , DES_KEY_CNT
				JEQ DES_KEY3
				CMP.B #15 , DES_KEY_CNT
				JEQ DES_KEY3
				JMP DES_KEY4
				
				DES_KEY3 BIC #FLAG_DES1 // 
				DES_KEY4
				CMP.B #16 , DES_KEY_CNT //
				JLO DES_KEY2
				ret //字程序结束***
				
				TAB_DESKEY DB 80H,86H,8CH,92H,98H,9EH,0A4H,0AAH,0B0H,0B6H,0BCH,0C2H,0C8H,0CEH,0D4H,0DAH
							

相关资源