資源簡介
DES 加解密算法的C語言簡單實現demo
Data Encryption Standard 56位密鑰加密64位數據

代碼片段和文件信息
/*-------------------------------------------------------
??????Data?Encryption?Standard??56位密鑰加密64位數據?
??2011.10
--------------------------------------------------------*/
#include?
#include?
#include?“bool.h“???//?位處理?
#include?“tables.h“
void?BitsCopy(bool?*DatOutbool?*DatInint?Len);??//?數組復制?
void?ByteToBit(bool?*DatOutchar?*DatInint?Num);?//?字節到位?
void?BitToByte(char?*DatOutbool?*DatInint?Num);?//?位到字節
void?BitToHex(char?*DatOutbool?*DatInint?Num);??//?二進制到十六進制?64位?to?4*16字符
void?HexToBit(bool?*DatOutchar?*DatInint?Num);??//?十六進制到二進制?
void?TablePermute(bool?*DatOutbool?*DatInconst?char?*Tableint?Num);?//?位表置換函數?
void?LoopMove(bool?*DatInint?Lenint?Num);?????//?循環左移?Len長度?Num移動位數?
void?Xor(bool?*DatAbool?*DatBint?Num);?????????//?異或函數?
void?S_Change(bool?DatOut[32]bool?DatIn[48]);???//?S盒變換?
void?F_Change(bool?DatIn[32]bool?DatKi[48]);????//?F函數??????????????????????????????????
void?SetKey(char?KeyIn[8]);?????????????????????????//?設置密鑰
void?PlayDes(char?MesOut[8]char?MesIn[8]);???????//?執行DES加密
void?KickDes(char?MesOut[8]char?MesIn[8]);?????????????//?執行DES解密?
?
int?main()
{
int?i=0;?
char?MesHex[16]={0};?????????//?16個字符數組用于存放?64位16進制的密文
? char?MyKey[8]={0};???????????//?初始密鑰?8字節*8
char?YourKey[8]={0};?????????//?輸入的解密密鑰?8字節*8
char?MyMessage[8]={0};???????//?初始明文?
/*-----------------------------------------------*/
printf(“Welcome!?Please?input?your?Message(64?bit):\n“);
gets(MyMessage);????????????//?明文
printf(“Please?input?your?Secret?Key:\n“);
gets(MyKey);????????????????//?密鑰
while(MyKey[i]!=‘\0‘)????????//?計算密鑰長度
{
i++;
}
while(i!=8)??????????????????//?不是8?提示錯誤
{
printf(“Please?input?a?correct?Secret?Key!\n“);
gets(MyKey);
i=0;
while(MyKey[i]!=‘\0‘)????//?再次檢測
{
i++;
}
}
SetKey(MyKey);???????????????//?設置密鑰?得到子密鑰Ki
PlayDes(MesHexMyMessage);???//?執行DES加密
printf(“Your?Message?is?Encrypted!:\n“);??//?信息已加密
for(i=0;i<16;i++)???????????
{
printf(“%c?“MesHex[i]);
}
printf(“\n“);
printf(“\n“);
printf(“Please?input?your?Secret?Key?to?Deciphering:\n“);??//?請輸入密鑰以解密
gets(YourKey);?????????????????????????????????????????//?得到密鑰
SetKey(YourKey);???????????????????????????????????????//?設置密鑰
KickDes(MyMessageMesHex);?????????????????????//?解密輸出到MyMessage
printf(“Deciphering?Over?!!:\n“);?????????????????????//?解密結束
for(i=0;i<8;i++)
{
printf(“%c?“MyMessage[i]);
}
printf(“\n“);
system(“pause“);
/*------------------------------------------------*/
}
/*-------------------------------
?把DatIn開始的長度位Len位的二進制
?復制到DatOut后
--------------------------------*/
void?BitsCopy(bool?*DatOutbool?*DatInint?Len)?????//?數組復制?OK?
{
int?i=0;
for(i=0;i {
DatOut[i]=DatIn[i];
}
}
/*-------------------------------
?字節轉換成位函數?
?每8次換一個字節?每次向右移一位
?和1與取最后一位?共64位?
--------------------------------*/
void?ByteToBit(bool?*DatOutch
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2017-09-10?16:00??DES\
?????目錄???????????0??2017-09-10?15:58??DES\Debug\
?????文件??????192581??2017-09-10?15:59??DES\Debug\DES.exe
?????文件??????206596??2017-09-10?15:59??DES\Debug\DES.ilk
?????文件??????185800??2017-09-10?15:58??DES\Debug\DES.pch
?????文件??????484352??2017-09-10?15:59??DES\Debug\DES.pdb
?????文件???????17731??2017-09-10?15:59??DES\Debug\main.obj
?????文件???????33792??2017-09-10?15:59??DES\Debug\vc60.idb
?????文件???????45056??2017-09-10?15:59??DES\Debug\vc60.pdb
?????文件????????4248??2011-10-07?22:29??DES\DES.dsp
?????文件?????????514??2011-10-07?21:39??DES\DES.dsw
?????文件???????50176??2017-09-10?16:00??DES\DES.ncb
?????文件???????48640??2017-09-10?16:00??DES\DES.opt
?????文件????????1264??2017-09-10?15:59??DES\DES.plg
?????目錄???????????0??2017-09-10?15:59??DES\Source\
?????文件?????????202??2012-09-07?11:24??DES\Source\bool.h
?????文件????????8557??2017-09-10?15:59??DES\Source\main.c
?????文件????????4458??2011-10-06?14:02??DES\Source\tables.h
- 上一篇:c語言期末大作業
- 下一篇:四川大學歷年考研C語言試題及答案
評論
共有 條評論