• 大小: 9.35MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-11-19
  • 语言: C/C++
  • 标签: 密码  数据加密  DES  

资源简介

数据加密标准(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\link.command.1.tlog

    I.A....      4104  2018-04-23 17:11  DES_test\DES_test\Debug\DES_test.tlog\link.read.1.tlog

    I.A....       590  2018-04-23 17:11  DES_test\DES_test\Debug\DES_test.tlog\link.write.1.tlog

    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个文件信息

评论

共有 条评论