DES加密解密类 可实现对文件非文件加密,以及自动获取密匙和手动输入
来源:互联网 发布:卡宝软件怎么样 编辑:程序博客网 时间:2024/05/16 10:20
发一个DES加密解密类。可实现对文件非文件加密,以及自动获取密匙和手动输入。
DES数据加密算法(Data Encryption Algorithm,DEA)是一种对称加密算法,很可能是使用最广泛的密钥系统,特别是在保护金融数据的安全中,最初开发的DEA是嵌入硬件中的。通常,自动取款机(Automated Teller Machine,ATM)都使用DEA。它出自IBM的研究工作,IBM也曾对它拥有几年的专利权,但是在1983年已到期后,处于公有范围中,允许在特定条件下可以免除专利使用费而使用。1977年被美国政府正式采纳。原理大家自己去百度。上代码。
DES.h[code]// 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_)
[/code]DES.cpp[code]// 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;
}
[/code] 上接DES.cpp[code]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}
}
};
[/code] 测试用例
main.cpp[code]#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;
}[/code]
- DES加密解密类 可实现对文件非文件加密,以及自动获取密匙和手动输入
- 文件DES加密解密
- des文件加密、解密
- DES加密解密文件
- 对文件进行DES加密与解密
- DES生成密钥文件实现加密解密
- 对文件压缩加密,解密解压缩,对称加密,DES算法
- DES加密解密算法文件
- java DES加密解密文件
- java DES加密解密文件
- Java DES文件加密解密
- 实现DES加密和解密的类
- 非对称加密(das) 和 对称加密(des)文件
- 对文件压缩加密/解密解压缩的例子,DES/RSA
- 实现对文件进行加密,解密程序代码
- 基于DES的文件加密/解密的实现
- c语言实现记事本文件的 DES加密 解密
- Java实现文件的DES加密与解密算法
- Hadoop 0.23.x/NameNode federation原理、编译、安装、体验
- linux学习笔记
- grails框架中查询聚合函数,如条数,总额
- java和JS获取屏幕分辨率
- comnand
- DES加密解密类 可实现对文件非文件加密,以及自动获取密匙和手动输入
- 输入数据将重复的剔除掉,剩下的写到文件中
- Linux内核开发之中断与时钟(三)
- linux主机ip,网关,子网掩码,DNS配置
- Linux_输出文件的某列or某几列_cut_-f
- Ogre1.7.x中使用CEGUI的变化
- 操作系统内存管理
- jsp页面dreamweaver中正常,myeclipse中乱码
- 2012-04-20