当前位置:   article > 正文

【C++】简单对称加密_c++ 对称加密

c++ 对称加密
  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 ( int 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 ( int 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 << 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 << endl;
  149. system( "Pause" );
  150. return(EXIT_SUCCESS);
  151. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/990967
推荐阅读
相关标签
  

闽ICP备14008679号