【C++】简单对称加密

来源:互联网 发布:java什么是工厂模式 编辑:程序博客网 时间:2024/04/29 08:53
#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;}/* 生成和密文相同长度的密联流 */DWORDdwDatalen= strlen( m_pData );CHAR*pTemp= new CHAR[dwDatalen + 1]();/* 生成密联流 */DWORD dwKeyLne = strlen( m_Key );for ( int 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 ( int 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";symEncryptionencryData;/* 设置加密的数据 */encryData.setEncryData( str, strlen( str ) + 1 );/* 设置加密密联 */encryData.setKey( key, strlen( key ) + 1 );/* 设置加密数据 */encryData.encryptionData();cout << "数据大小" << encryData.getResultSize() << endl;cout << "加密前" << str << 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 << endl;system( "Pause" );return(EXIT_SUCCESS);}

0 0
原创粉丝点击