• Fuentes

 #314679  por BlackZeroX
 17 Ago 2011, 20:32
.
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;
}

Temibles Lunas!¡.