資源簡(jiǎn)介
本程序是用C++封裝成的DES加解密應(yīng)用程序,配合VC界面的整套源碼。

代碼片段和文件信息
#include?“stdafx.h“
#include?“des.h“
#include?“table.h“
#include?
void?des::IP(?Data64?&word?)
{
ROR(?word.a?4?);
ROR(?word.b?3?);
ROR(?word.c?2?);
ROR(?word.d?1?);
ROL(?word.e?1?);
ROL(?word.f?2?);
ROL(?word.g?3?);
ROL(?word.h?4?);
}
void?des::IP_1(?Data64?&word?)
{
ROR(?word.h?4?);
ROR(?word.g?3?);
ROR(?word.f?2?);
ROR(?word.e?1?);
ROL(?word.d?1?);
ROL(?word.c?2?);
ROL(?word.b?3?);
ROL(?word.a?4?);
}
void?des::extend_R(?Data32?&R?Data48?&E_R?)
{
E_R.a?=?R.d;
E_R.b?=?R.d;
E_R.c?=?R.c;
E_R.d?=?R.b;
E_R.e?=?R.a;
E_R.f?=?R.a;
}
void?des::switch_key_lib(?Data64?&k_lib?)
{
unsigned?char?i;
unsigned?char?*p*p_cpy;
unsigned?char?temp;
unsigned?char?mn;
unsigned?char?cd;
Data64?k_lib_cpy;
k_lib.a?=?(?k_lib.b?<7?)?+?(?k_lib.a?&?0x7F?);//去掉奇偶位
k_lib.b?=?(?k_lib.c?<6?)?+?(?(?k_lib.b?>>?1?)?&?0x3F?);
k_lib.c?=?(?k_lib.d?<5?)?+?(?(?k_lib.c?>>?2?)?&?0x1F?);
k_lib.d?=?(?k_lib.e?<4?)?+?(?(?k_lib.d?>>?3?)?&?0x0F?);
k_lib.e?=?(?k_lib.f?<3?)?+?(?(?k_lib.e?>>?4?)?&?0x07?);
k_lib.f?=?(?k_lib.g?<2?)?+?(?(?k_lib.f?>>?5?)?&?0x03?);
k_lib.g?=?(?k_lib.h?<1?)?+?(?(?k_lib.g?>>?6?)?&?0x01?);
k_lib.h?=?0;
k_lib_cpy?=?k_lib;
p?=?(?unsigned?char?*?)&k_lib;
p_cpy?=?(?unsigned?char?*?)&k_lib_cpy;
for(?i?=?0;?i?56;?i++?)
{
m?=?position_table[?switch_k_table[?i?]?-?1?][?0?];//獲得要換位所在的字符串的號(hào)碼
n?=?position_table[?switch_k_table[?i?]?-?1?][?1?];//獲得要換位所在字符串中的位置
c?=?position_table[?i?][?0?];
d?=?position_table[?i?][?1?];
temp?=?p_cpy[?m?]?&?and_table_get[?n?];//獲得要換位的二進(jìn)制位
if(?n?>?d?)
{
p[?c?]?=?(?p[?c?]?&?and_table_out[?d?]?)?+?(?temp?>>?(?n?-?d?)?);//將要換位移到被換位所對(duì)應(yīng)的位置
}
else
{
p[?c?]?=?(?p[?c?]?&?and_table_out[?d?]?)?+?(?temp?<(?d?-?n?)?);
}
}
}
void?des::rotate_key_lib(?Data64?&k_lib?char?i?)
{
unsigned?char?temp1temp2;
????temp1?=?k_lib.c?>>?(?8?-?i?);
k_lib.c?=?(?k_lib.c?<>?(?8?-?i?)?);
k_lib.b?=?(?k_lib.b?<>?(?8?-?i?)?);
k_lib.a?=?(?k_lib.a?<>?(?4?-?i?)?)?&?and_rotate_inside[?0?][?i?-?1?]?);
temp2?=?k_lib.e?<(?8?-?i?);
k_lib.e?=?(?k_lib.e?>>?i?)?+?(?k_lib.f?<(?8?-?i?)?);
k_lib.f?=?(?k_lib.f?>>?i?)?+?(?k_lib.g?<(?8?-?i?)?);
k_lib.g?=?(?k_lib.g?>>?i?)?+?(?(?k_lib.d?<(?4?-?i?)?)?&?and_rotate_inside[?1?][?i?-?1?]?);
k_lib.d?=?temp2?+?(?(?k_lib.d?>>?i?)?&?and_rotate_inside[?1?][?i?+?1?]?)?+?(?(?k_lib.d?<}
void?des::get_key_from_lib(?Data48?&key?Data64?&k_lib?)//key為所求值,k_lib為未知值
{
/*key.a?=?k_lib.b;
key.b?=?k_lib.c;
key.c?=?k_lib.d;
key.d?=?k_lib.e;
key.e?=?k_lib.f;
key.f?=?k_lib.g;*/
char?i;
unsigned?char?temp;
unsigned?char?mnab;
unsigned?char?*p_key*p_lib;
memset(?&key?0?6?);//先將key清零
p_key?=?(?unsigned?char?*?)&key;
p_lib?=?(?unsigned?char?*?)&k_lib;
for(?i?=?0;?i?48;?i++?)//按照密碼選
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件??????11044??2009-03-09?14:27??EncryptDlg.cpp
?????文件???????1889??2009-03-02?10:49??EncryptDlg.h
?????文件???????3597??2009-02-27?08:45??ReadMe.txt
?????文件???????1560??2009-02-28?09:57??resource.h
?????文件????????209??2009-02-27?08:45??StdAfx.cpp
?????文件???????1054??2009-02-27?08:45??StdAfx.h
?????文件???????4400??2009-02-21?15:54??table.h
?????文件???????1078??2009-02-27?08:45??res\Encrypt.ico
?????文件????????399??2009-02-27?08:45??res\Encrypt.rc2
?????文件????????437??2009-02-21?15:02??data.h
?????文件???????7209??2009-03-02?10:32??des.cpp
?????文件????????650??2009-02-28?12:04??des.h
?????文件???????7068??2009-03-02?10:44??des_1.cpp
?????文件????????630??2009-02-28?09:32??des_1.h
?????文件??????21380??2009-03-09?14:11??Encrypt.aps
?????文件???????1649??2009-08-24?10:38??Encrypt.clw
?????文件???????2077??2009-02-27?08:45??Encrypt.cpp
?????文件???????3342??2009-08-24?10:39??Encrypt.dsp
?????文件????????537??2009-02-27?08:45??Encrypt.dsw
?????文件???????1335??2009-02-27?08:45??Encrypt.h
?????文件?????123904??2009-08-24?10:39??Encrypt.ncb
?????文件??????50688??2009-08-24?10:39??Encrypt.opt
?????文件???????1888??2009-08-24?10:39??Encrypt.plg
?????文件???????5769??2009-03-02?10:49??Encrypt.rc
?????目錄??????????0??2009-03-02?16:30??res
-----------?---------??----------?-----??----
???????????????253793????????????????????25
評(píng)論
共有 條評(píng)論