资源简介
数据加密标准(Data Encryption Standard,DES)是在美国IBM公司的研究人员Horst Feistel 和Walter Tuchman于20世纪70年代中期提出的一个密码算法(LUCIFER算法(金星算法))的基础之上发展而来的,并于1977年1月15日由美国国家标准局(NBS)正式公布实施,是第一公开的商用密码标准,并得到了ISO的认可。
代码片段和文件信息
#include “DES.h“
#include
using namespace std;
DES::DES()
{
}
DES::~DES()
{
}
bitset<32> DES::F(bitset<32> R bitset<48> k) {
//E盒扩展
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;
}
//左移函数
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;
//首先经过选择置换PC-1,将初始密钥的8bit奇偶校验位去掉
//并重新编排
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做重排,进行压缩
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 时就报错。。。。。
} //。。。数组越界,应-1.。。
/*compressKey[i] = real_key[PC_2[i]];*/
//wrong!!!
subkey[round] = compressKey;
}
}
// 工具函数:将char字符数组转为二进制
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;
}
//工具函数:进行二进制逆向转换
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
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
..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个文件信息
相关资源
- DES文件加密解密系统 密码学课设
- C++编写的数据加密程序源代码6个
- 红外遥控电子密码锁
- 密码编码学:加密方法的C与C++实现
- MMX-密码编码学:加密方法的C与C++实现
- 密码学:分组密码DES算法C语言版
- 密码学 模逆与模幂计算与应用 MFC实现
- 大漠7.1933VIP所有工具+VC++新手注册安装
- STM32 电子密码锁设计,LCD12864显示C语
- VC++实现简单的用户登录系统ADO。包括
- VC++实现简单的用户登录系统,包括修
- 简单实现凯撒密码的c++代码
- 密码编码学:加密方法的C与C++实现
- 典型密码算法及其C语言实现——
- 希尔密码加密、解密和破密HillCodor
- c++ 凯撒密码(加密、解密)
- C语言密码本
- 用C++模拟集中式密钥分配的过程
- c语言课程设计学生信息管理系统含登
- SPN线性密码分析
- 作业4 RSA和大数因式分解
- 基于51的电子密码锁程序及仿真
- 用 WinPCAP 监听并分析 FTP 协议并记录
- 维吉尼亚 只知道密文进行破译得倒原
- 密码学差分密码解密程序实现
- 基于单片机和PROTUES仿真的电子密码锁
- c语言实现国密SM2
- 实现数字签名算法DSA,Hash算法的实现
- 密码学RSA 算法源码及大数运算的实现
- 维吉尼亚密码 C语言
评论
共有 条评论