资源简介
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
相关资源
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
- c++ 画图(14Qt-XPS)
- c++多边形交并差运算
- VC++基于OpenGL模拟的一个3维空间模型
- c++ 虚拟摄像头
- hook,捕获所有案件,查找所有窗口,
- C语言课设计算器
- c++ 简易贪吃蛇源码
- 高精度加法(c++代码)
- C++调用百度地图案例
- 北京化工大学计算方法(C/C++)讲义
- 基于VC++的SolidWorks二次开发SolidWorks
- c++ 模拟鼠标按键
- OFD编辑器
- Beginning C++17 From Novice to Professional
- C++ STL实现
- opencv手部轮廓识别以及轨迹识别
- 百度C++编码规范
- C++ sql2008 WebServer通讯.docx
- c++ 定时关机程序源码
- 基于VSCode和CMake实现C++开发
- c++语法查询工具
- c++ 账务系统源码
- GBT 28169-2011 嵌入式软件 C语言编码规范
- c++ 猜拳小游戏
- XUnZip Zip解压缩.rar
评论
共有 条评论