資源簡(jiǎn)介
DES 加解密算法的C語(yǔ)言簡(jiǎn)單實(shí)現(xiàn)demo
Data Encryption Standard 56位密鑰加密64位數(shù)據(jù)

代碼片段和文件信息
/*-------------------------------------------------------
??????Data?Encryption?Standard??56位密鑰加密64位數(shù)據(jù)?
??2011.10
--------------------------------------------------------*/
#include?
#include?
#include?“bool.h“???//?位處理?
#include?“tables.h“
void?BitsCopy(bool?*DatOutbool?*DatInint?Len);??//?數(shù)組復(fù)制?
void?ByteToBit(bool?*DatOutchar?*DatInint?Num);?//?字節(jié)到位?
void?BitToByte(char?*DatOutbool?*DatInint?Num);?//?位到字節(jié)
void?BitToHex(char?*DatOutbool?*DatInint?Num);??//?二進(jìn)制到十六進(jìn)制?64位?to?4*16字符
void?HexToBit(bool?*DatOutchar?*DatInint?Num);??//?十六進(jìn)制到二進(jìn)制?
void?TablePermute(bool?*DatOutbool?*DatInconst?char?*Tableint?Num);?//?位表置換函數(shù)?
void?LoopMove(bool?*DatInint?Lenint?Num);?????//?循環(huán)左移?Len長(zhǎng)度?Num移動(dòng)位數(shù)?
void?Xor(bool?*DatAbool?*DatBint?Num);?????????//?異或函數(shù)?
void?S_Change(bool?DatOut[32]bool?DatIn[48]);???//?S盒變換?
void?F_Change(bool?DatIn[32]bool?DatKi[48]);????//?F函數(shù)??????????????????????????????????
void?SetKey(char?KeyIn[8]);?????????????????????????//?設(shè)置密鑰
void?PlayDes(char?MesOut[8]char?MesIn[8]);???????//?執(zhí)行DES加密
void?KickDes(char?MesOut[8]char?MesIn[8]);?????????????//?執(zhí)行DES解密?
?
int?main()
{
int?i=0;?
char?MesHex[16]={0};?????????//?16個(gè)字符數(shù)組用于存放?64位16進(jìn)制的密文
? char?MyKey[8]={0};???????????//?初始密鑰?8字節(jié)*8
char?YourKey[8]={0};?????????//?輸入的解密密鑰?8字節(jié)*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‘)????????//?計(jì)算密鑰長(zhǎng)度
{
i++;
}
while(i!=8)??????????????????//?不是8?提示錯(cuò)誤
{
printf(“Please?input?a?correct?Secret?Key!\n“);
gets(MyKey);
i=0;
while(MyKey[i]!=‘\0‘)????//?再次檢測(cè)
{
i++;
}
}
SetKey(MyKey);???????????????//?設(shè)置密鑰?得到子密鑰Ki
PlayDes(MesHexMyMessage);???//?執(zhí)行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“);??//?請(qǐng)輸入密鑰以解密
gets(YourKey);?????????????????????????????????????????//?得到密鑰
SetKey(YourKey);???????????????????????????????????????//?設(shè)置密鑰
KickDes(MyMessageMesHex);?????????????????????//?解密輸出到MyMessage
printf(“Deciphering?Over?!!:\n“);?????????????????????//?解密結(jié)束
for(i=0;i<8;i++)
{
printf(“%c?“MyMessage[i]);
}
printf(“\n“);
system(“pause“);
/*------------------------------------------------*/
}
/*-------------------------------
?把DatIn開(kāi)始的長(zhǎng)度位Len位的二進(jìn)制
?復(fù)制到DatOut后
--------------------------------*/
void?BitsCopy(bool?*DatOutbool?*DatInint?Len)?????//?數(shù)組復(fù)制?OK?
{
int?i=0;
for(i=0;i {
DatOut[i]=DatIn[i];
}
}
/*-------------------------------
?字節(jié)轉(zhuǎn)換成位函數(shù)?
?每8次換一個(gè)字節(jié)?每次向右移一位
?和1與取最后一位?共64位?
--------------------------------*/
void?ByteToBit(bool?*DatOutch
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????目錄???????????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
評(píng)論
共有 條評(píng)論