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

583 篇文章 127 订阅
36 篇文章 23 订阅

客户端源码:

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);
    }
}



评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT1995

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值