鱼C论坛

 找回密码
 立即注册
查看: 2279|回复: 1

[技术交流] 简单的对称加密。。。

[复制链接]
发表于 2015-10-6 21:22:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
KEY.png
#include <iostream>
#include <string.h>
#include <tchar.h>
#include <windows.h>
using namespace std;

/* 简单的对称加密类 */
class symEncryption
{
private:
        CHAR        *m_pData;
        CHAR        *m_Key;
        CHAR        *m_reSult;
public:
        /* 设置加密的数据 */
        BOOL setEncryData(CHAR *pszData, DWORD dwSizes)
        {
                if (NULL == pszData || NULL == dwSizes)
                {
                        return(FALSE);
                }

                if (NULL != m_pData)
                {
                        delete[]m_pData;
                }


                this->m_pData = new CHAR[dwSizes];

                if (NULL == m_pData)
                {
                        return(FALSE);
                }


                memcpy(m_pData, pszData, dwSizes);

                return(TRUE);
        }


        /* 设置数据钥匙 */
        BOOL setKey(CHAR *pszKey, DWORD dwSizes)
        {
                if (NULL == pszKey || NULL == dwSizes)
                {
                        return(FALSE);
                }

                if (NULL != m_Key)
                {
                        delete[]m_Key;
                }

                this->m_Key = new CHAR[dwSizes];

                if (NULL == m_Key)
                {
                        return(FALSE);
                }

                memcpy(m_Key, pszKey, dwSizes);

                return(TRUE);
        }


        /* 加密数据 */
        BOOL encryptionData()
        {
                if (NULL == m_pData || NULL == m_Key)
                {
                        return(FALSE);
                }

                if (NULL != m_reSult)
                {
                        delete[]m_reSult;
                }

                /* 生成和密文相同长度的密联流 */
                DWORD        dwDatalen = strlen(m_pData);
                CHAR        *pTemp = new CHAR[dwDatalen + 1]();


                /* 生成密联流 */
                DWORD dwKeyLne = strlen(m_Key);
                for (DWORD sum = 0; sum < dwDatalen; sum++)
                {
                        pTemp[sum] = m_Key[sum % dwKeyLne + sum];
                }
                pTemp[dwDatalen] = 0;

                /* Xor加密 */

                if (NULL != m_reSult)
                {
                        delete[]m_reSult;
                }
                m_reSult = new CHAR[dwDatalen + 1]();

                for (DWORD sum = 0; sum < dwDatalen; sum++)
                {
                        m_reSult[sum] = pTemp[sum] ^ m_pData[sum];
                }
                m_reSult[dwDatalen] = 0;

                delete[]pTemp;
        }


        /* 获取加密/解密的数据 */
        DWORD getResultSize()
        {
                return(strlen(m_reSult) + 1);
        }


        /* 获取加密后的数据 */
        BOOL getResultData(CHAR *pszData)
        {
                if (NULL == pszData)
                {
                        return(FALSE);
                }

                memcpy(pszData, this->m_reSult, strlen(m_reSult) + 1);
        }


        ~symEncryption()
        {
                if (NULL != this->m_pData)
                {
                        delete[]this->m_pData;

                        this->m_pData = NULL;
                }

                if (NULL != this->m_Key)
                {
                        delete[]this->m_Key;

                        this->m_Key = NULL;
                }

                if (NULL != this->m_reSult)
                {
                        delete[]this->m_reSult;

                        this->m_reSult = NULL;
                }
        }
};

int main(void)
{
        /* 【字符串加密测试】 */

        /* 加密数据 */
        char                * str = "hello";
        char                *key = "fishc";
        symEncryption        encryData;

        /* 设置加密的数据 */
        encryData.setEncryData(str, strlen(str) + 1);

        /* 设置加密密联 */
        encryData.setKey(key, strlen(key) + 1);

        /* 设置加密数据 */
        encryData.encryptionData();

        cout << "数据大小" << encryData.getResultSize() << endl;

        cout << "加密前" << str << "  密钥"<<key<<endl;

        char buffer[20] = { 0 };
        /* 得到加密后的数据 */
        encryData.getResultData(buffer);

        cout << "加密后" << buffer << endl;


        /* 解密数据 */
        symEncryption decryptData;

        /* 设置解密数据密联 */
        decryptData.setKey(key, strlen(key) + 1);

        /* 设置解密的数据 */
        decryptData.setEncryData(buffer, strlen(buffer) + 1);

        /* 解密数据 */
        decryptData.encryptionData();

        /* 得到解密的数据 */
        decryptData.getResultData(buffer);

        cout << "解密后" << buffer << "  密钥" << key <<  endl;


        system("Pause");


        return(EXIT_SUCCESS);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-10-15 03:20:11 | 显示全部楼层
学习了,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 11:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表