• 大小: 5KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-06-13
  • 语言: C/C++
  • 标签: C++  DES  

资源简介

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“ << endl;
}


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 < digits; bits++ *--p = ‘0‘);
return p;
}

int DES::bin_to_dec(string s) {
    //二进制转十进制
    int result = 0;
    for (int i = 0; i < s.size(); 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 << n << endl; 
        result.push_back(static_cast(n));
        s = (digits < s.size()) ? s.substr(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 < gap; 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 < s1.size(); 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


评论

共有 条评论