|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #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);
- }
复制代码 |
|