資源簡介
DES算法的C++實現,可以輸入任意字符,進行加密和解密,命令行界面。

代碼片段和文件信息
#include?
#include?
#include??
#include?
#include?
#include?
#include?
#include??
#include?
#include?“DES.h“
using?namespace?std;
DES::DES(string?input?string?key?int?f?=?0)?{//參數分別為加密內容和密碼(密鑰),以及加密或解密,?默認為加密?
????set_flag(f);
????set_input(input);
????set_key(key);
}
DES::~DES()?{
????cout?<“DES加解密完成!\n“?<}
string?DES::dec_to_bin(unsigned?long?number?int?digits?=?32)?{
????//將十進制數轉化為digits位二進制
char?retbuf[32];
char?*p?=?&retbuf[sizeof(retbuf)?-?1];?
*p?=?‘\0‘;
int?bits?=?0;
do?{
*--p?=?“01“[number%2];
number?/=?2;
bits++;
}
while?(number?!=?0);
for(;bits? return?p;
}
int?DES::bin_to_dec(string?s)?{
????//二進制轉十進制
????int?result?=?0;
????for?(int?i?=?0;?i?????????result?+=?(s[s.size()-i-1]-‘0‘)*pow(2?i);
????}
????return?result;
}
string?DES::str_to_bin(string?s?int?digits?=?32)?{
????//字符串轉二進制
string?result?=?““;
ostringstream?oss(ostringstream::out);
????oss.flags(ios::dec?|?ios::uppercase);
????for(size_t?i=0;?i ???? result?+=?(dec_to_bin(static_cast(s[i])?digits));
}
oss.clear();
????return?result;
}
string?DES::bin_to_str(string?s?int?digits?=?32)?{
????//二進制轉字符串
????//cout?<“bin_input\n\n\n“;
string?result?=?““;
????unsigned?long?n;
????while(!s.empty())?{
????????//字符串以32位為單位
????????n?=?strtoul(s.substr(0digits).c_str()?0?2);
????????//cout?<????????result.push_back(static_cast(n));
????????s?=?(digits?????}
????return?result;
}
void?DES::create_group()?{
????//建立分組,且分組均為64位
????Group.clear();
????string?temp?=?bin_input;
????int?gflag?=?1;
????while(!temp.empty())?{
????????if?(temp.size()?>?64)?{
????????????Group.push_back(temp.substr(0?64));
????????????temp?=?temp.substr(64);
????????}
????????else?if(temp.size()?==?64)?{
???????? Group.push_back(temp);
???????? gflag?=?0;
????????????break;
}
????????else?{
????????????int?gap?=?8-temp.size()/8;
????????????for?(int?i?=?0;?i?????????????????temp?=?temp?+?dec_to_bin(gap?8);
????????????}
????????????Group.push_back(temp);
????????????break;
????????}
????}
????//填充分組
????if?(gflag?==?0?&&?flag?==?0)?{
????????temp?=?““;
????????for?(int?i?=?0;?i?8;?i++)?{
????????????temp?=?temp?+?dec_to_bin(8?8);
????????}
????????Group.push_back(temp);
????}
}
string?DES::pri_trans(string?s)?{
????//根據IP表進行初始置換,輸入64位,輸出64位
????string?result?=?s;
????for?(int?i?=?0;?i?64;?i++)?{
????????result[i]?=?s[IP[i]-1];
????}
????return?result;
}
string?DES::SXOR(string?s1?string?s2)?{
????//對兩個32位字符串進行異或操作
????string?result?=?s1;
????for?(int?i?=?0;?i?????????result[i]?=?(s1[i]!=s2[i])?‘1‘:‘0‘;
????}
????return?result;
}
string?DES::T_iteration(string?s)?{
????//T迭代
????
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????9115??2018-10-31?12:28??DES.cpp
?????文件???????6265??2018-10-29?15:59??DES.h
-----------?---------??----------?-----??----
????????????????15380????????????????????2
評論
共有 條評論