您的位置:首页 > 编程语言 > C语言/C++

【C++】简单对称加密

2015-10-06 21:25 274 查看
#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 ( 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";
symEncryption	encryData;

/* 设置加密的数据 */
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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: