鱼C论坛

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

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

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

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

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

x
KEY.png

  1. #include <iostream>
  2. #include <string.h>
  3. #include <tchar.h>
  4. #include <windows.h>
  5. using namespace std;

  6. /* 简单的对称加密类 */
  7. class symEncryption
  8. {
  9. private:
  10.         CHAR        *m_pData;
  11.         CHAR        *m_Key;
  12.         CHAR        *m_reSult;
  13. public:
  14.         /* 设置加密的数据 */
  15.         BOOL setEncryData(CHAR *pszData, DWORD dwSizes)
  16.         {
  17.                 if (NULL == pszData || NULL == dwSizes)
  18.                 {
  19.                         return(FALSE);
  20.                 }

  21.                 if (NULL != m_pData)
  22.                 {
  23.                         delete[]m_pData;
  24.                 }


  25.                 this->m_pData = new CHAR[dwSizes];

  26.                 if (NULL == m_pData)
  27.                 {
  28.                         return(FALSE);
  29.                 }


  30.                 memcpy(m_pData, pszData, dwSizes);

  31.                 return(TRUE);
  32.         }


  33.         /* 设置数据钥匙 */
  34.         BOOL setKey(CHAR *pszKey, DWORD dwSizes)
  35.         {
  36.                 if (NULL == pszKey || NULL == dwSizes)
  37.                 {
  38.                         return(FALSE);
  39.                 }

  40.                 if (NULL != m_Key)
  41.                 {
  42.                         delete[]m_Key;
  43.                 }

  44.                 this->m_Key = new CHAR[dwSizes];

  45.                 if (NULL == m_Key)
  46.                 {
  47.                         return(FALSE);
  48.                 }

  49.                 memcpy(m_Key, pszKey, dwSizes);

  50.                 return(TRUE);
  51.         }


  52.         /* 加密数据 */
  53.         BOOL encryptionData()
  54.         {
  55.                 if (NULL == m_pData || NULL == m_Key)
  56.                 {
  57.                         return(FALSE);
  58.                 }

  59.                 if (NULL != m_reSult)
  60.                 {
  61.                         delete[]m_reSult;
  62.                 }

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


  66.                 /* 生成密联流 */
  67.                 DWORD dwKeyLne = strlen(m_Key);
  68.                 for (DWORD sum = 0; sum < dwDatalen; sum++)
  69.                 {
  70.                         pTemp[sum] = m_Key[sum % dwKeyLne + sum];
  71.                 }
  72.                 pTemp[dwDatalen] = 0;

  73.                 /* Xor加密 */

  74.                 if (NULL != m_reSult)
  75.                 {
  76.                         delete[]m_reSult;
  77.                 }
  78.                 m_reSult = new CHAR[dwDatalen + 1]();

  79.                 for (DWORD sum = 0; sum < dwDatalen; sum++)
  80.                 {
  81.                         m_reSult[sum] = pTemp[sum] ^ m_pData[sum];
  82.                 }
  83.                 m_reSult[dwDatalen] = 0;

  84.                 delete[]pTemp;
  85.         }


  86.         /* 获取加密/解密的数据 */
  87.         DWORD getResultSize()
  88.         {
  89.                 return(strlen(m_reSult) + 1);
  90.         }


  91.         /* 获取加密后的数据 */
  92.         BOOL getResultData(CHAR *pszData)
  93.         {
  94.                 if (NULL == pszData)
  95.                 {
  96.                         return(FALSE);
  97.                 }

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


  100.         ~symEncryption()
  101.         {
  102.                 if (NULL != this->m_pData)
  103.                 {
  104.                         delete[]this->m_pData;

  105.                         this->m_pData = NULL;
  106.                 }

  107.                 if (NULL != this->m_Key)
  108.                 {
  109.                         delete[]this->m_Key;

  110.                         this->m_Key = NULL;
  111.                 }

  112.                 if (NULL != this->m_reSult)
  113.                 {
  114.                         delete[]this->m_reSult;

  115.                         this->m_reSult = NULL;
  116.                 }
  117.         }
  118. };

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

  122.         /* 加密数据 */
  123.         char                * str = "hello";
  124.         char                *key = "fishc";
  125.         symEncryption        encryData;

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

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

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

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

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

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

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


  138.         /* 解密数据 */
  139.         symEncryption decryptData;

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

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

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

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

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


  149.         system("Pause");


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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 17:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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