资源简介
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
相关资源
- C++头文件转delphi工具 + 源码
- 国际象棋的qt源代码
- C++中头文件与源文件的作用详解
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 利用C++哈希表的方法实现电话号码查
- 移木块游戏,可以自编自玩,vc6.0编写
- 3des加密算法C语言实现
- C++纯文字DOS超小RPG游戏
- DES加密算法C语言实现
- VC++MFC小游戏实例教程(实例)+MFC类库
- C语言实现的DES对称加密算法
- 连铸温度场计算程序(C++)
- 6自由度机器人运动学正反解C++程序
- Em算法(使用C++编写)
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- 白话C++(全)
- C++标准库第1、2
- 大数类c++大数类
- C++语言编写串口调试助手
- c++素数筛选法
- C++ mqtt 用法
- 商品库存管理系统 C++ MFC
- c++ 多功能计算器
- C++17 In Detail
- 嵌入式QtC++编程课件
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
评论
共有 条评论