您的位置:首页 > 编程语言 > C语言/C++

大三软件工程小项目-小技术集合-3DES加密及解密

2017-03-07 23:17 363 查看
客户端源码:

http://download.csdn.net/detail/qq78442761/9768668

服务端源码:

http://download.csdn.net/detail/qq78442761/9768662

客户端进行加密:



服务端进行解密:



本程序很简单的,因为不涉及密钥传输,密钥已经提前给客户端了,

下面是如何对数据进行3DES加密和解密

有一个叫libdes的第三方库。

我们调用他就可以进行加密和解密了,

下面看客户端加密:

在客户端里的

widget.h里面

有这样的两个方法:

void Encry3Name(); //3DES加密用户名
void Encry3Data(); //3DES加密数据现在看看widget.cpp里面的具体说明
void Widget::Encry3Name()
{
UserNameData=m_UserName.toUtf8().data();
char key1[] = "qwertyui";
char key2[] = "asdfghjk";
char key3[] = "zxcvbnm";

//姓名加密
QString d2=QString::fromUtf8(UserNameData);
qDebug()<<"姓名加密前(char*):"<<UserNameData;
qDebug()<<"姓名加密前(QString):"<<m_UserName;
Code des1(key1);
des1.EncryptName(UserNameData, UserNameData);
Code des2(key2);
des2.DevryptName(UserNameData,UserNameData);
Code des3(key3);
des3.EncryptName(UserNameData,UserNameData);
d2=QString::fromUtf8(UserNameData);
m_UserName=d2;
qDebug()<<"姓名加密后(char*):"<<UserNameData;

// 测试
// des3.DevryptName(SendALLData,SendALLData);
// des2.EncryptName(SendALLData,SendALLData);
// des1.DevryptName(SendALLData,SendALLData);
// QString d9=QString::fromUtf8(SendALLData);
// qDebug()<<"demo2016-9-29 17:57:14:"<<d9;
}

下面是对数据进行加密的代码:
void Widget::Encry3Data()
{
char key1[] = "qwertyui";
char key2[] = "asdfghjk";
char key3[] = "zxcvbnm";

DataToChar(GradeMoney);

qDebug()<<"加密前:Data[0]"<<GradeMoney[0];
qDebug()<<"加密前:Data[6]"<<(int)GradeMoney[6];

Code des1(key1);
des1.EncryptData(GradeMoney, GradeMoney);
Code des2(key2);
des2.DevryptData(GradeMoney,GradeMoney);
Code des3(key3);
des3.EncryptData(GradeMoney,GradeMoney);

//解密测试模拟服务器解密
// des3.DevryptData(GradeMoney,GradeMoney);
// des2.EncryptData(GradeMoney,GradeMoney);
// des1.DevryptData(GradeMoney,GradeMoney);

// qDebug()<<"解密后:Data[0]"<<GradeMoney[0];
// qDebug()<<"解密后:Data[7]"<<(int)GradeMoney[7];

}
总结下:
就是用一个密钥对数据进行加密,然后用一个密钥解密,再用一个密钥加密。

而解密的过程正好相反,

下面来看客户端的解密源码:

客户端的解密是在当socket接受到数据后就进行解密。

代码如下:

void TcpClientSocket::dataReceived()
{
while(bytesAvailable()>0)
{
int length = bytesAvailable();
char buf[1024];
read(buf,length);

//解密
char temp1[16];
char temp2[8];
for(int i=0;i<16;i++)
temp1[i]=buf[i];
for(int i=0;i<8;i++)
temp2[i]=buf[16+i];
char key1[] = "qwertyui";
char key2[] = "asdfghjk";
char key3[] = "zxcvbnm";
Code des1(key1);
Code des2(key2);
Code des3(key3);
des3.DevryptName(temp1,temp1);
des2.EncryptName(temp1,temp1);
des1.DevryptName(temp1,temp1);
QString msg=QString::fromUtf8(temp1);
qDebug()<<"解密后用户名"<<msg;

des3.DevryptData(temp2,temp2);
des2.EncryptData(temp2,temp2);
des1.DevryptData(temp2,temp2);
qDebug()<<"解密后数据为"<<temp2[0];
qDebug()<<"解密后数据为"<<(int)temp2[7];
emit updateClients(msg,temp2,length);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  项目 CC++ qt 3DES 加密