Bluesteel
11.03.2009, 12:32
So nun hier wieder etwas für alle
Verschlüsselungs-Erweiterung für CNetConn
also fangen wir mal an^^
datei namens crypto.h
/*
Cryptography extensions for CNetConn
Currently only implements simple XOR encoding
Dependencies: CString
*/
#ifndef _CRYPTO_H_INC_
#define _CRYPTO_H_INC_
#include <windows.h>
#include "string.h"
#define CRYPT_NONE 0
#define CRYPT_XOR 1
#define CRYPT_STD_KEY "A"
/*
* class CCrypto
*
* En/decrypts generic data e.g. for network communication or secure file storage
*
*/
class CCrypto
{
public:
// Main constructor
// Initializes class and some variables
CCrypto();
// Main destructor
// Frees memory and terminates app
~CCrypto();
int SetMethod(int iMethod);
CString Encrypt(CString strData);
CString Decrypt(CString strData);
CString EncryptXOR(CString, CString);
CString DecryptXOR(CString, CString);
private:
int m_iMethod;
};
#endif // ifdef _CRYPTO_H_INC_
und nun die datei namens crypto.cpp
/*
Cryptography extensions for CNetConn
Currently only implements simple XOR encoding
Dependencies: CString
*/
#include "crypto.h"
/*
* default constructor
*
*/
CCrypto::CCrypto()
{
m_iMethod = CRYPT_NONE;
}
CCrypto::~CCrypto()
{
}
int CCrypto::SetMethod(int iMethod)
{
m_iMethod = iMethod;
return 0;
}
CString CCrypto::Encrypt(CString strData)
{
CString strStdKey = CRYPT_STD_KEY;
switch (m_iMethod)
{
case CRYPT_NONE:
return strData;
case CRYPT_XOR:
return EncryptXOR(strData, strStdKey);
default:
return strData;
}
}
CString CCrypto::Decrypt(CString strData)
{
CString strStdKey = CRYPT_STD_KEY;
switch (m_iMethod)
{
case CRYPT_NONE:
return strData;
case CRYPT_XOR:
return DecryptXOR(strData, strStdKey);
default:
return strData;
}
}
CString CCrypto::EncryptXOR(CString strData, CString strKey)
{
CString strOut;
int iPos;
int iKeyPos = 0;
int iLen = strData.GetLength();
int iKeyLen = strKey.GetLength();
if (!iKeyLen || !iLen) return strOut; // return empty string if data or key is empty
for (iPos = 0; iPos < iLen; iPos++)
{
strOut += strData[iPos] ^ strKey[iKeyPos++];
if (iKeyPos >= iKeyLen) iKeyPos = 0;
}
return strOut;
}
CString CCrypto::DecryptXOR(CString strData, CString strKey)
{
return EncryptXOR(strData, strKey);
}
viel spaß^^
Verschlüsselungs-Erweiterung für CNetConn
also fangen wir mal an^^
datei namens crypto.h
/*
Cryptography extensions for CNetConn
Currently only implements simple XOR encoding
Dependencies: CString
*/
#ifndef _CRYPTO_H_INC_
#define _CRYPTO_H_INC_
#include <windows.h>
#include "string.h"
#define CRYPT_NONE 0
#define CRYPT_XOR 1
#define CRYPT_STD_KEY "A"
/*
* class CCrypto
*
* En/decrypts generic data e.g. for network communication or secure file storage
*
*/
class CCrypto
{
public:
// Main constructor
// Initializes class and some variables
CCrypto();
// Main destructor
// Frees memory and terminates app
~CCrypto();
int SetMethod(int iMethod);
CString Encrypt(CString strData);
CString Decrypt(CString strData);
CString EncryptXOR(CString, CString);
CString DecryptXOR(CString, CString);
private:
int m_iMethod;
};
#endif // ifdef _CRYPTO_H_INC_
und nun die datei namens crypto.cpp
/*
Cryptography extensions for CNetConn
Currently only implements simple XOR encoding
Dependencies: CString
*/
#include "crypto.h"
/*
* default constructor
*
*/
CCrypto::CCrypto()
{
m_iMethod = CRYPT_NONE;
}
CCrypto::~CCrypto()
{
}
int CCrypto::SetMethod(int iMethod)
{
m_iMethod = iMethod;
return 0;
}
CString CCrypto::Encrypt(CString strData)
{
CString strStdKey = CRYPT_STD_KEY;
switch (m_iMethod)
{
case CRYPT_NONE:
return strData;
case CRYPT_XOR:
return EncryptXOR(strData, strStdKey);
default:
return strData;
}
}
CString CCrypto::Decrypt(CString strData)
{
CString strStdKey = CRYPT_STD_KEY;
switch (m_iMethod)
{
case CRYPT_NONE:
return strData;
case CRYPT_XOR:
return DecryptXOR(strData, strStdKey);
default:
return strData;
}
}
CString CCrypto::EncryptXOR(CString strData, CString strKey)
{
CString strOut;
int iPos;
int iKeyPos = 0;
int iLen = strData.GetLength();
int iKeyLen = strKey.GetLength();
if (!iKeyLen || !iLen) return strOut; // return empty string if data or key is empty
for (iPos = 0; iPos < iLen; iPos++)
{
strOut += strData[iPos] ^ strKey[iKeyPos++];
if (iKeyPos >= iKeyLen) iKeyPos = 0;
}
return strOut;
}
CString CCrypto::DecryptXOR(CString strData, CString strKey)
{
return EncryptXOR(strData, strKey);
}
viel spaß^^