您的位置:首页 > 其它

DES加密解密类 可实现对文件非文件加密,以及自动获取密匙和手动输入

2012-04-20 09:49 429 查看

发一个DES加密解密类。可实现对文件非文件加密,以及自动获取密匙和手动输入。

DES数据加密算法(Data Encryption Algorithm,DEA)是一种对称加密算法,很可能是使用最广泛的密钥系统,特别是在保护金融数据的安全中,最初开发的DEA是嵌入硬件中的。通常,自动取款机(Automated Teller Machine,ATM)都使用DEA。它出自IBM的研究工作,IBM也曾对它拥有几年的专利权,但是在1983年已到期后,处于公有范围中,允许在特定条件下可以免除专利使用费而使用。1977年被美国政府正式采纳。

原理大家自己去百度。上代码。

DES.h
// DES.h: interface for the DES class.

//

//////////////////////////////////////////////////////////////////////

#if !defined(AFX_DES_H__97A93961_015D_4BDF_914E_F4386FEE39CD__INCLUDED_)

#define AFX_DES_H__97A93961_015D_4BDF_914E_F4386FEE39CD__INCLUDED_

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

#include <windows.h>

class DES

{

public:

DES();

virtual ~DES();

BOOL  EncryptFile(PTCHAR szpOPath,PTCHAR szpDPath);        //对文件加密 第一个参数为原文路径 第二个参数是 密文路径

BOOL  EncryptNonFile(PTCHAR szpInput,PTCHAR szpOutput,int nLength);// 对非文件加密 第一个参数是 输入 第二个参数是加密后输出,第三个参数是带价密字符串大小

BOOL  DecryptFile(PTCHAR szpEPath,PTCHAR szpOrPath);//对文件解密 第一个参数是密文文件路径 第二个参数是解密后文件路径

BOOL  DecryptNonFile(PTCHAR szpInput, PTCHAR szpOutPut,int nLength);//对非文件解密 第一个参数是 待解密类容 第二个参数是解密后输出

BOOL  SetMethosOfKey(BOOL bSetByMyself, PTCHAR szpKey);//选择获取密钥的方法,随机获得或者人工输入 bSetBySelf为真则自己输入

PSTR  GetKey();// 取得密匙

private:

BOOL GetARandomKey();//得到一个随机密匙

BOOL ByteToBit(TCHAR cByte, PTCHAR szpBite);//字节转换二进制位

BOOL BitToByte(PTCHAR szpBite, PTCHAR cByte);//二进制位转换为字节

BOOL Byte8ToBit64(PTCHAR szpByte, PTCHAR szpBit);//长度为8的字符串转换为二进制位

BOOL Bit64ToByte8(PTCHAR szp64Data, PTCHAR szp8Byte);//将64位二进制数据转换为8长度的字符串

BOOL MakeSubKey(PTCHAR szpKey);//生成16个子密钥

BOOL SplitKey(PTCHAR szpKey, PTCHAR szpCKey, PTCHAR szpDKey);//分拆密钥

BOOL LeftMove(TCHAR data[56], int time);//左移

//BOOL LeftMove(PTCHAR szpCKey, PTCHAR szpDKey, int nTime);//左移

BOOL MergeKey(PTCHAR szpCKey, PTCHAR szpDKey, PTCHAR szpTemp);//合并密码

BOOL IpTransform(PTCHAR szpData);//IP置换

BOOL SplitData(PTCHAR szpOrData, PTCHAR szpLData, PTCHAR szpRData);//分拆64输入为两个 32 分组

BOOL FFuction(PTCHAR szpInputData, int nCount);// f函数

BOOL Xor(PTCHAR szpData, PTCHAR szpSubKey);//与子密钥异或

BOOL SBox(PTCHAR szp48Data, PTCHAR szp32Data);//s盒转换

BOOL XorWithL(PTCHAR szLData, PTCHAR szRData);//与L分组数据异或

BOOL Swap(PTCHAR szpLData, PTCHAR szpRData);//交换分组数据

BOOL MergeData(PTCHAR szp64Bit, PTCHAR szpLData, PTCHAR szpRData);

BOOL EncryptA64Data(PTCHAR szp8ByteInput, PTCHAR sz8ByteOutput);//加密一个64位分组数据

BOOL DecryptA64Data(PTCHAR szp8ByteInput, PTCHAR sz8ByteOutput);

BOOL Ip_1Transform(PTCHAR szpData);//ip-1置换

BOOL PTransform(PTCHAR szp32Data, PTCHAR szpOuptData);

BOOL ETransform(PTCHAR szpData32, PTCHAR szpData48);

BOOL Pc_1Transform(PTCHAR szpKey, PTCHAR szpTemp);//pc-1置换

BOOL Pc_2Transform(PTCHAR szpKey, PTCHAR szpSubKey);//pc-2置换

private:

TCHAR m_szKey[8];

TCHAR m_szSubKey[16][48];

private:

const static int m_nIP_1[64];

const static int m_nIP[64];

const static int m_nE[48];

const static int m_nP[32];

const static int m_nPC_1[56];

const static int m_nPC_2[56];

const static int m_nLeft_Move[16];

const static int m_nS_Box[8][4][16];

};

#endif // !defined(AFX_DES_H__97A93961_015D_4BDF_914E_F4386FEE39CD__INCLUDED_)
DES.cpp
// DES.cpp: implementation of the DES class.

//

//////////////////////////////////////////////////////////////////////

#include "DES.h"

#include <iostream>

#include <tchar.h>

#include <time.h>

//////////////////////////////////////////////////////////////////////

// Construction/Destruction

//////////////////////////////////////////////////////////////////////

DES::DES()

{

memset(m_szKey,0,sizeof(TCHAR)*8);

}

DES::~DES()

{

}

PSTR DES::GetKey()

{

return m_szKey;

}

BOOL DES::SetMethosOfKey(BOOL bSetByMyse,PTCHAR szpKey)//bSetByMeself为Ture 则自己设置 否则随机设置

{

if (TRUE == bSetByMyse)

{

memcpy(m_szKey,szpKey,sizeof(TCHAR)*_tcslen(szpKey));

}

else

{

GetARandomKey();

}

return TRUE;

}

BOOL DES::GetARandomKey()

{

memset(m_szKey,0,sizeof(TCHAR)*8);

srand((unsigned)time(NULL));

for (int i = 0;i < 8; i++)

{

m_szKey[i] = (char)(128*rand()/(RAND_MAX+1.0));

}

return TRUE;

}

BOOL DES::ByteToBit(TCHAR cByte, PTCHAR szpBite)

{

for (int i = 0;i < 8;i++)

{

*(szpBite + i) = (cByte >> i)&1;

}

return TRUE;

}

BOOL DES::BitToByte(PTCHAR szpBite, PTCHAR cByte)

{

for (int i = 0; i < 8; i++)

{

*cByte |= *(szpBite + i) << i;

}

return TRUE;

}

BOOL DES::Byte8ToBit64(PTCHAR szpByte, PTCHAR szpBit)

{

for (int i = 0; i < 8; i++)

{

ByteToBit(*(szpByte + i),szpBit + (i << 3));

}

return TRUE;

}

BOOL DES::MakeSubKey(PTCHAR szpKey)//生成子密钥

{

TCHAR szTemp[56] = {0};

TCHAR szBitKey[64] = {0};

Byte8ToBit64(szpKey,szBitKey);

Pc_1Transform(szBitKey,szTemp);

TCHAR szCKey[28] = {0},szDKey[28] = {0};

//SplitKey(szTemp,szCKey,szDKey);

for (int i = 0; i < 16; i++)

{

//LeftMove(szCKey,szDKey,i);

//MergeKey(szCKey,szDKey,szTemp);

LeftMove(szTemp, m_nLeft_Move[i]);

Pc_2Transform(szTemp,m_szSubKey[i]);

}

return TRUE;

}

BOOL DES::MergeKey(PTCHAR szpCKey, PTCHAR szpDKey, PTCHAR szpTemp)//输出一个子密匙

{

memcpy(szpTemp,szpCKey,sizeof(TCHAR)*28);

memcpy(szpTemp + 28,szpDKey,sizeof(TCHAR)*28);

return TRUE;

}

BOOL DES::Pc_2Transform(PTCHAR szpKey, PTCHAR szpSubKey)//PC-2置换

{

for (int i = 0; i < 48; i++)

{

*(szpSubKey + i) = *(szpKey + m_nPC_2[i]);

}

return TRUE;

}

//

//BOOL DES::LeftMove(PTCHAR szpCKey, PTCHAR szpDKey, int nTime)//左移

//{

//        TCHAR szTemp[28] = {0};

//

//        memcpy(szTemp,szpCKey + m_nLeft_Move[nTime],sizeof(TCHAR)*(28 - m_nLeft_Move[nTime]));

//        memcpy(szTemp + 28 - m_nLeft_Move[nTime],szpCKey,sizeof(TCHAR)*m_nLeft_Move[nTime]);

//        memcpy(szpCKey,szTemp,sizeof(TCHAR)*28);

//

//        memcpy(szTemp,szpDKey + m_nLeft_Move[nTime],sizeof(TCHAR)*(28 - m_nLeft_Move[nTime]));

//        memcpy(szTemp + 28 - m_nLeft_Move[nTime],szpDKey,sizeof(TCHAR)*m_nLeft_Move[nTime]);

//        memcpy(szpDKey,szTemp,sizeof(TCHAR)*28);

//

//        return TRUE;

//}

BOOL DES::Pc_1Transform(PTCHAR szpKey, PTCHAR szpTemp)//pc-1置换

{

for (int i = 0; i < 56; i++)

{

*(szpTemp + i) = *(szpKey + m_nPC_1[i]);

}

return TRUE;

}

BOOL DES::SplitKey(PTCHAR szpKey, PTCHAR szpCKey, PTCHAR szpDKey)//分拆密钥

{

memcpy(szpCKey,szpKey,sizeof(TCHAR)*28);

memcpy(szpDKey,szpKey + 28,sizeof(TCHAR)*28);

return TRUE;

}

BOOL DES::IpTransform(PTCHAR szpData)//ip置换

{

TCHAR szTemp[64] = {0};

for (int i = 0; i < 64; i++)

{

szTemp[i] = *(szpData + m_nIP[i]);

}

memcpy(szpData,szTemp,sizeof(TCHAR)*64);

return TRUE;

}

BOOL DES::SplitData(PTCHAR szpOrData, PTCHAR szpLData, PTCHAR szpRData)

{

memcpy(szpLData,szpOrData,sizeof(TCHAR)*32);

memcpy(szpRData,szpOrData + 32,sizeof(TCHAR)*32);

return TRUE;

}

BOOL DES::FFuction(PTCHAR szpInputData, int nCount)//f函数

{

TCHAR szData[48] = {0};

TCHAR sz32Data[32] = {0};

TCHAR szOututData[32] = {0};

ETransform(szpInputData,szData);

Xor(szData,m_szSubKey[nCount]);

SBox(szData,sz32Data);

PTransform(sz32Data,szOututData);

memcpy(szpInputData,szOututData,sizeof(TCHAR)*32);

return TRUE;

}

BOOL DES::SBox(PTCHAR szp48Data, PTCHAR szp32Data)//s盒转化

{

for (int i = 0; i < 8; i++)

{

int nCur = i*6;

int nLine = (*(szp48Data + nCur) << 1) + (*(szp48Data +nCur + 5));

int nRow = (*(szp48Data +nCur + 1) << 3) + (*(szp48Data +nCur + 2) << 2) + (*(szp48Data +nCur + 3) << 1) + (*(szp48Data +nCur + 4));

int OutPut = m_nS_Box[i][nLine][nRow];

*(szp32Data + 4 * i) = (OutPut & 8) >> 3;

*(szp32Data + 4 * i + 1) = (OutPut & 4) >> 2;

*(szp32Data + 4 * i + 2) = (OutPut & 2) >> 1;

*(szp32Data + 4 * i + 3) = OutPut & 1;

}

return TRUE;

}

BOOL DES::PTransform(PTCHAR szp32Data, PTCHAR szpOuptData)//p置换

{

for (int i = 0; i < 32; i++)

{

*(szpOuptData + i) = *(szp32Data + m_nP[i]);

}

return TRUE;

}

BOOL DES::Xor(PTCHAR szpData, PTCHAR szpSubKey)//异或///////////////////////调试到此处

{

for (int i = 0; i < 48; i++)

{

*(szpData + i) ^= *(szpSubKey + i);

}

return TRUE;

}

BOOL DES::ETransform(PTCHAR szpData32, PTCHAR szpData48)//扩展置换

{

for (int i = 0; i < 48; i++)

{

*(szpData48 + i) = *(szpData32 + m_nE[i]);

}

return TRUE;

}

BOOL DES::XorWithL(PTCHAR szLData, PTCHAR szRData)

{

for (int i = 0; i < 32; i++)

{

*(szLData + i) ^= *(szRData + i);

}

return TRUE;

}

BOOL DES::Swap(PTCHAR szpLData, PTCHAR szpRData)

{

TCHAR szTemp[32];

memcpy(szTemp,szpLData,sizeof(TCHAR)*32);

memcpy(szpLData,szpRData,sizeof(TCHAR)*32);

memcpy(szpRData,szTemp,sizeof(TCHAR)*32);

return TRUE;

}

BOOL DES::EncryptA64Data(PTCHAR szp8ByteInput, PTCHAR sz8ByteOutput)//加密一个64位分组数据

{

TCHAR szBite[64] = {0};

Byte8ToBit64(szp8ByteInput,szBite);

IpTransform(szBite);

TCHAR szLData[32] = {0},szRData[32] = {0};

SplitData(szBite,szLData,szRData);

for (int i = 0; i < 16; i++)

{

TCHAR szTemp[32] = {0};

memcpy(szTemp,szRData,sizeof(TCHAR)*32);

FFuction(szRData,i);

XorWithL(szLData,szRData);

memcpy(szRData,szTemp,sizeof(TCHAR)*32);

if (i != 15)

{

Swap(szLData,szRData);

}

}

MergeData(szBite,szLData,szRData);

Ip_1Transform(szBite);

Bit64ToByte8(szBite,sz8ByteOutput);

return TRUE;

}


maomao 发表于 2011-3-16 23:44

上接DES.cpp
BOOL DES::DecryptA64Data(PTCHAR szp8ByteInput, PTCHAR sz8ByteOutput)

{

TCHAR szBite[64] = {0};

Byte8ToBit64(szp8ByteInput,szBite);

IpTransform(szBite);

TCHAR szLData[32] = {0},szRData[32] = {0};

SplitData(szBite,szLData,szRData);

for (int i = 15; i >= 0; i--)

{

TCHAR szTemp[32] = {0};

memcpy(szTemp,szRData,sizeof(TCHAR)*32);

FFuction(szRData,i);

XorWithL(szLData,szRData);

memcpy(szRData,szTemp,sizeof(TCHAR)*32);

if (i != 0)

{

Swap(szLData,szRData);

}

}

MergeData(szBite,szLData,szRData);

Ip_1Transform(szBite);

Bit64ToByte8(szBite,sz8ByteOutput);

return TRUE;

}

BOOL DES::Ip_1Transform(PTCHAR szpData)

{

TCHAR szBit[64] = {0};

for (int i = 0; i < 64; i++)

{

szBit[i] = *(szpData + m_nIP_1[i]);

}

memcpy(szpData,szBit,sizeof(TCHAR)*64);

return TRUE;

}

BOOL DES::MergeData(PTCHAR szp64Bit, PTCHAR szpLData, PTCHAR szpRData)

{

memcpy(szp64Bit,szpLData,sizeof(TCHAR)*32);

memcpy(szp64Bit + 32,szpRData,sizeof(TCHAR)*32);

return 0;

}

BOOL DES::Bit64ToByte8(PTCHAR szp64Data, PTCHAR szp8Byte)

{

memset(szp8Byte,0,8);

for (int i = 0; i < 8; i++)

{

BitToByte(szp64Data + (i << 3), szp8Byte + i);

}

return TRUE;

}

BOOL DES::LeftMove(TCHAR data[56], int time)

{

TCHAR temp[56];

//保存将要循环移动到右边的位

memcpy(temp,data,time);

memcpy(temp+time,data+28,time);

//前28位移动

memcpy(data,data+time,28-time);

memcpy(data+28-time,temp,time);

//后28位移动

memcpy(data+28,data+28+time,28-time);

memcpy(data+56-time,temp+time,time);

return TRUE;

}

BOOL DES::EncryptNonFile(PTCHAR szpInput,PTCHAR szpOutput,int nLength)

{

int nLen = 0;

BOOL bJudge = FALSE;

MakeSubKey(m_szKey);

if (nLength % 8 != 0)

{

nLen += (nLength / 8 + 1)<<3;

bJudge = TRUE;

}

else

{

nLen = nLength;

}

int i = 0;

while (TRUE)

{

TCHAR sz8Byte[8] = {0};

if ((i == nLen - 8) && (bJudge == TRUE))

{

memset(sz8Byte,'\0',sizeof(TCHAR)*8);

memcpy(sz8Byte,szpInput + i,sizeof(TCHAR)*(nLength - 1 - i));

sz8Byte[7] = 8 - nLength + i + 1;

}

else

{

memcpy(sz8Byte,szpInput + i,sizeof(TCHAR)*8);

}

TCHAR szOutPut[8];

EncryptA64Data(sz8Byte,szOutPut);

memcpy(szpOutput + i,szOutPut,sizeof(TCHAR) * 8);

if (i == nLen - 8)

{

break;

}

i += 8;

}

return TRUE;

}

BOOL DES::DecryptNonFile(PTCHAR szpInput, PTCHAR szpOutPut,int nLength)

{

MakeSubKey(m_szKey);

for (int i = 0; i < nLength/8 ; i++)

{

TCHAR sz8Byte[8] = {0};

TCHAR szTemp[8] = {0};

memcpy(sz8Byte,szpInput + i*8,sizeof(TCHAR)*8);

DecryptA64Data(sz8Byte,szTemp);

memcpy(szpOutPut + i*8,szTemp,sizeof(TCHAR)*8);

}

return TRUE;

}

BOOL DES::EncryptFile(PTCHAR szpOPath,PTCHAR szpDPath)

{

MakeSubKey(m_szKey);

FILE *fOrTxt = NULL,*fETxt = NULL;

if((fOrTxt = fopen(szpOPath,"rb")) == NULL)

{

return FALSE;

}

if ((fETxt = fopen(szpDPath,"wb")) == NULL)

{

return FALSE;

}

TCHAR szInput[8] = {0},szOutPut[8] = {0};

int nCount = 0;

while (!feof(fOrTxt))

{

if ((nCount = fread(szInput,sizeof(TCHAR),8,fOrTxt)) == 8)

{

EncryptA64Data(szInput,szOutPut);

fwrite(szOutPut,sizeof(TCHAR),8,fETxt);

}

}

if (nCount > 0)

{

memset(szInput + nCount,'\0',7 - nCount);

szInput[7] = 8 - nCount;

EncryptA64Data(szInput,szOutPut);

fwrite(szOutPut,sizeof(TCHAR),8,fETxt);

}

fclose(fETxt);

fclose(fOrTxt);

return TRUE;

}

BOOL DES::DecryptFile(PTCHAR szpEPath,PTCHAR szpOrPath)

{

MakeSubKey(m_szKey);

FILE *fOrTxt = NULL,*fETxt = NULL;

if((fOrTxt = fopen(szpOrPath,"wb")) == NULL)

{

return FALSE;

}

if ((fETxt = fopen(szpEPath,"rb")) == NULL)

{

return FALSE;

}

fseek(fETxt,0,SEEK_END);

int nLength = ftell(fETxt);

rewind(fETxt);

TCHAR szInput[8] = {0},szOutPut[8] = {0};

int nCount = 0;

while (TRUE)

{

fread(szInput,sizeof(TCHAR),8,fETxt);

DecryptA64Data(szInput,szOutPut);

nCount += 8;

if (nCount < nLength)

{

fwrite(szOutPut,sizeof(TCHAR),8,fOrTxt);

}

else

{

break;

}

}

int nLen = 0;

if (szOutPut[7] < 8)

{

for (nLen = 8 - szOutPut[7]; nLen < 7; nLen++)

{

if (szOutPut[nLen] != '\0')

{

break;

}

}

}

if (nLen == 7)

{

fwrite(szOutPut,sizeof(TCHAR),8 - szOutPut[7],fOrTxt);

}

else

{

fwrite(szOutPut,sizeof(TCHAR),8,fOrTxt);

}

fclose(fETxt);

fclose(fOrTxt);

return TRUE;

}

const  int DES::m_nIP_1[64] =

{

39,7,47,15,55,23,63,31,

38,6,46,14,54,22,62,30,

37,5,45,13,53,21,61,29,

36,4,44,12,52,20,60,28,

35,3,43,11,51,19,59,27,

34,2,42,10,50,18,58,26,

33,1,41, 9,49,17,57,25,

32,0,40, 8,48,16,56,24

};

const  int DES::m_nIP[64] =

{

57,49,41,33,25,17,9,1,

59,51,43,35,27,19,11,3,

61,53,45,37,29,21,13,5,

63,55,47,39,31,23,15,7,

56,48,40,32,24,16,8,0,

58,50,42,34,26,18,10,2,

60,52,44,36,28,20,12,4,

62,54,46,38,30,22,14,6

};

const int DES::m_nP[32] =

{

15,6,19,20,28,11,27,16,

0,14,22,25,4,17,30,9,

1,7,23,13,31,26,2,8,

18,12,29,5,21,10,3,24

};

const int DES::m_nPC_1[56] =

{

56,48,40,32,24,16,8,

0,57,49,41,33,25,17,

9,1,58,50,42,34,26,

18,10,2,59,51,43,35,

62,54,46,38,30,22,14,

6,61,53,45,37,29,21,

13,5,60,52,44,36,28,

20,12,4,27,19,11,3

};

const int DES::m_nPC_2[56] =

{

13,16,10,23,0,4,2,27,

14,5,20,9,22,18,11,3,

25,7,15,6,26,19,12,1,

40,51,30,36,46,54,29,39,

50,44,32,46,43,48,38,55,

33,52,45,41,49,35,28,31

};

const int DES::m_nE[48] =

{

31, 0, 1, 2, 3, 4,

3,  4, 5, 6, 7, 8,

7,  8,9,10,11,12,

11,12,13,14,15,16,

15,16,17,18,19,20,

19,20,21,22,23,24,

23,24,25,26,27,28,

27,28,29,30,31, 0

};

const int DES::m_nLeft_Move[16] = {1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1};

const int DES::m_nS_Box[8][4][16] =

{

{

{14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7},

{0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8},

{4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0},

{15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13}

},

//S2

{

{15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10},

{3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5},

{0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15},

{13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9}

},

//S3

{

{10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8},

{13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1},

{13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7},

{1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12}

},

//S4

{

{7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15},

{13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9},

{10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4},

{3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14}

},

//S5

{

{2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9},

{14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6},

{4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14},

{11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3}

},

//S6

{

{12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11},

{10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8},

{9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6},

{4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13}

},

//S7

{

{4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1},

{13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6},

{1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2},

{6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12}

},

//S8

{

{13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7},

{1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2},

{7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8},

{2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11}

}

};


maomao 发表于 2011-3-16 23:44

测试用例

main.cpp
#include <iostream>

#include "DES.h"

using namespace std;

int main()

{

DES desObject;

//        TCHAR szKeyy[8] = {0};

//        TCHAR str[] = "12345678";

//        memcpy(szKeyy,str,8);

desObject.SetMethosOfKey(FALSE,NULL);

desObject.EncryptFile("G:\\1.txt","G:\\2.txt");

desObject.DecryptFile("G:\\2.txt","G:\\3.txt");

//        TCHAR szKey[9] = {0};

//        memcpy(szKey,desObject.GetKey(),8);

//        cout<<"密匙为:"<<szKey<<endl;

//        TCHAR szData[30] = {"龙珠爱打飞机!"};// 实验数据

//        //cout <<"请输入数据"<<endl;

//        //cin>>szData;

//        TCHAR szOutPutData[16] = {0};

//        desObject.EncryptNonFile(szData,szOutPutData,30);

//        cout<<"密文为:"<<szOutPutData<<endl;

//        FILE *fpFile = fopen("1.txt","at+");

//        fprintf(fpFile,"%s",szOutPutData);

//        TCHAR sz[16] = {0};

//        desObject.DecryptNonFile(szOutPutData,sz,16);

//        cout<<"明文为:"<<sz<<endl;

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐