-
大小: 9.35MB文件類型: .rar金幣: 2下載: 0 次發(fā)布日期: 2023-11-19
- 語言: C/C++
- 標(biāo)簽: 密碼??數(shù)據(jù)加密??DES??
資源簡介
數(shù)據(jù)加密標(biāo)準(zhǔn)(Data Encryption Standard,DES)是在美國IBM公司的研究人員Horst Feistel 和Walter Tuchman于20世紀(jì)70年代中期提出的一個(gè)密碼算法(LUCIFER算法(金星算法))的基礎(chǔ)之上發(fā)展而來的,并于1977年1月15日由美國國家標(biāo)準(zhǔn)局(NBS)正式公布實(shí)施,是第一公開的商用密碼標(biāo)準(zhǔn),并得到了ISO的認(rèn)可。

代碼片段和文件信息
#include?“DES.h“
#include
using?namespace?std;
DES::DES()
{
}
DES::~DES()
{
}
bitset<32>?DES::F(bitset<32>?R?bitset<48>?k)?{
//E盒擴(kuò)展
bitset<48>?expandR;??
for?(int?i?=?0;?i?48;?i++)
expandR[47?-?i]?=?R[32?-?E[i]];??//expandR[i]?=?R[E[i]?-?1];
//異或
expandR?=?expandR?^?k;
//S盒代替
bitset<32>?output;
int?x?=?0;
for?(int?i?=?0;?i?48;?i?=?i?+?6)
{
int?row?=?expandR[i]?*?2?+?expandR[i?+?5];
int?col?=?expandR[i?+?1]?*?8?+?expandR[i?+?2]?*?4?+?expandR[i?+?3]?*?2?+?expandR[i?+?4];
int?num?=?S_BOX[i?/?6][row][col];
bitset<4>?temp(num);
output[x?+?3]?=?temp[0];
output[x?+?2]?=?temp[1];
output[x?+?1]?=?temp[2];
output[x]?=?temp[3];
x?+=?4;
}
//P盒置換
bitset<32>?tmp?=?output;
for?(int?i?=?0;?i?32;?i++)
output[i]?=?tmp[P[i]?-?1];
return?output;
}
//左移函數(shù)
bitset<28>?DES::leftshift(bitset<28>?k?int?shift)?{
bitset<28>?temp?=?k;
if?(shift?==?1)
{
for?(int?i?=?0;?i?27;?i++)
{
if?(i?-?shift?0)
k[i?-?shift?+?28]?=?temp[i];
else
k[i]?=?temp[i?+?shift];
}
}
if?(shift?==?2)
{
for?(int?i?=?0;?i?26;?i++)
{
if?(i?-?shift?0)
k[i?-?shift?+?28]?=?temp[i];
else
k[i]?=?temp[i?+?shift];
}
}
return?k;
}
void?DES::generateKeys()?{
bitset<56>?real_key;
bitset<28>?left;
bitset<28>?right;
bitset<48>?compressKey;
//首先經(jīng)過選擇置換PC-1,將初始密鑰的8bit奇偶校驗(yàn)位去掉
//并重新編排
for?(int?i?=?0;?i?56;?i++)
real_key[i]?=?key[PC_1[i]?-?1];
for?(int?round?=?0;?round?16;?round++)
{
for?(int?i?=?0;?i?28;?i++)
left[i]?=?real_key[i];
for?(int?i?=?28;?i?56;?i++)
right[i?-?28]?=?real_key[i];
//左移
left?=?leftshift(left?shiftBits[round]);
right?=?leftshift(right?shiftBits[round]);
//連接,置換選擇PC-2做重排,進(jìn)行壓縮
for?(int?i=0;?i?28;?i++)
real_key[i]?=?left[i];
for?(int?i?=?28;?i?56;?i++)
real_key[i]?=?right[i?-?28];
for?(int?i?=?0;?i?48;?i++)
{
int?m?=?PC_2[i];
compressKey[i]?=?real_key[m?-?1];//i=39?時(shí)就報(bào)錯(cuò)。。。。。
}????????????????????????????????????//。。。數(shù)組越界,應(yīng)-1.。。
/*compressKey[i]?=?real_key[PC_2[i]];*/?
//wrong!!!
subkey[round]?=?compressKey;
}
}
//?工具函數(shù):將char字符數(shù)組轉(zhuǎn)為二進(jìn)制
bitset<64>?DES::char_to_bit(const?char?s[8])?{
bitset<64>?bits;
int?x?=?0;
for?(int?i?=?0;?i?8;?i++)
{
int?num?=?int(s[i]);
bitset<8>?temp(num);
for?(int?j?=?7;?j?>=?0;?j--)
{
bits[x?+?j]?=?temp[7?-?j];
}
x?+=?8;
}
/*for?(int?i?=?0;?i<8;?++i)
for?(int?j?=?0;?j<8;?++j)
bits[i?*?8?+?j]?=?((s[i]?>>?j)?&?1);
*/
return?bits;
}
//工具函數(shù):進(jìn)行二進(jìn)制逆向轉(zhuǎn)換
bitset<64>?DES::change(bitset<64>?temp)?{
bitset<64>?bits;
bitset<8>?n;
int?x;
for?(int?i?=?0;?i?64;?i?=?i?+?8)
{
for?(int?j?=?0;?j?8;?j++)
{
bits[i?+?j]?=?temp[i?+?7?-?j];
}
}
return?bits;
}
/*char?*?DES::bit_to_char(const?bitset<64>?test)?{
int?count?=?0;
int?temp;
char?now[8];
for?(int?i?=?0;?i?64;?i?=?i?+?8)
{
temp?=?0;
for?(int?j?=?0
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
????..A..H.?????37376??2018-04-23?17:27??DES_test\.vs\DES_test\v15\.suo
?????文件????5713920??2018-04-23?17:27??DES_test\.vs\DES_test\v15\Browse.VC.db
?????文件???27721728??2018-04-23?16:37??DES_test\.vs\DES_test\v15\ipch\AutoPCH\e86faee2d28fcf7e\USER.ipch
?????文件???26607616??2018-04-20?23:08??DES_test\.vs\DES_test\v15\ipch\AutoPCH\f2f923de80fa59d\DES.ipch
????I.A....????145920??2018-04-23?17:11??DES_test\Debug\DES_test.exe
????I.A....????628732??2018-04-23?17:11??DES_test\Debug\DES_test.ilk
????I.A....???1077248??2018-04-23?17:18??DES_test\Debug\DES_test.pdb
????I.A....????150044??2018-04-10?18:17??DES_test\DES_test\Debug\DES.obj
????I.A....????????94??2018-04-23?17:11??DES_test\DES_test\Debug\DES_test.log
????I.A....??????1274??2018-04-23?17:11??DES_test\DES_test\Debug\DES_test.tlog\CL.command.1.tlog
????I.A....?????37854??2018-04-23?17:11??DES_test\DES_test\Debug\DES_test.tlog\CL.read.1.tlog
????I.A....??????1698??2018-04-23?17:11??DES_test\DES_test\Debug\DES_test.tlog\CL.write.1.tlog
????I.A....???????212??2018-04-23?17:11??DES_test\DES_test\Debug\DES_test.tlog\DES_test.lastbuildstate
????I.A....??????1288??2018-04-23?17:11??DES_test\DES_test\Debug\DES_test.tlog\li
????I.A....??????4104??2018-04-23?17:11??DES_test\DES_test\Debug\DES_test.tlog\li
????I.A....???????590??2018-04-23?17:11??DES_test\DES_test\Debug\DES_test.tlog\li
????I.A....????254890??2018-04-23?17:11??DES_test\DES_test\Debug\user.obj
????I.A....????478208??2018-04-23?17:11??DES_test\DES_test\Debug\vc141.idb
????I.A....????495616??2018-04-23?17:11??DES_test\DES_test\Debug\vc141.pdb
????I.A....??????4917??2018-04-10?18:17??DES_test\DES_test\DES.cpp
????I.A....??????4181??2018-04-10?18:15??DES_test\DES_test\DES.h
????I.A....??????6048??2018-04-08?20:20??DES_test\DES_test\DES_test.vcxproj
????I.A....??????1148??2018-04-08?20:20??DES_test\DES_test\DES_test.vcxproj.filters
????I.A....??????1617??2018-04-23?17:09??DES_test\DES_test\user.cpp
????I.A....??????1438??2018-04-08?18:45??DES_test\DES_test.sln
?????目錄??????????0??2019-05-09?10:56??DES_test\.vs\DES_test\v15\ipch\AutoPCH\e86faee2d28fcf7e
?????目錄??????????0??2019-05-09?10:56??DES_test\.vs\DES_test\v15\ipch\AutoPCH\f2f923de80fa59d
?????目錄??????????0??2019-05-09?10:56??DES_test\.vs\DES_test\v15\ipch\AutoPCH
?????目錄??????????0??2019-05-09?10:56??DES_test\.vs\DES_test\v15\ipch
?????目錄??????????0??2019-05-09?10:56??DES_test\.vs\DES_test\v15
............此處省略10個(gè)文件信息
評論
共有 條評論