Es una alternativa a la encriptacion Xor por emdio de un Valor numerico dado en este caso un INT.
La funcion como es claro y deberia de serlo NO MANEJA de manera interna la creacion de la memoria, en otras palabras, trabaja con el puntero al buffer indicado.
Código: Seleccionar todo
#include <stdio.h>
#include <string.h>
#define BYTE unsigned char
#define SIZE_INT sizeof(int)
BYTE* crypt_Xor(BYTE* pbyData, size_t szLn, int iPass);
int main()
{
char szCadena[] = "Hola Mundo";
int iPass = 666;
printf("%s\n", crypt_Xor((BYTE*)szCadena, strlen(szCadena), iPass));
printf("%s\n", crypt_Xor((BYTE*)szCadena, strlen(szCadena), iPass));
getchar();
return 0;
}
BYTE* crypt_Xor(BYTE* pbyData, size_t szLn, int iPass) {
/**
-by BlackZeroX (http://infrangelux.sytes.net/blog/)
**/
size_t i = 0;
int* pIntData= (int*)pbyData;
if (!pbyData || szLn == 0) return NULL;
for (i = (szLn >> (SIZE_INT>> 1 )); i > 0; i--)
*(pIntData++) ^= iPass;
for (i = (szLn % SIZE_INT);i > 0; i--)
pbyData[szLn - i] ^= ((BYTE*)&iPass)[(!(SIZE_INT - i) & 0xf)];
return pbyData;
}