ENCRIPTACION DE CADENAS CON XOR - .: .: Saiyine :. :.

Encriptacion de cadenas con XOR

Por Saiyine Enviar correo el 2005-12-29 23:54:00 - Secciones:  DELPHI  - Enlace permanente: 474

// EncriptaXOR('esta es la frase de ejemplo','claveXXX')
function EncriptaXOR(cadena,clave : string) : string;
var
i : integer;
begin
        result:='';
        for i:=1 to length(cadena) do
        result:=result+chr(ord(cadena[i]) xor ord(clave[(i mod length(clave))+1]));
end;

La encriptacion con XOR es un clasico entre los clasicos... antes se usaba mucho, por ejemplo, en los virus para hacerlos mas dificiles de encontrar (¿os suena 'virus polimorficos'?). El XOR tiene la propiedad de que si le haces a un numero la operacion XOR dos veces con el mismo numero, obtienes de nuevo el primer numero...

A ver si lo se explicar:

23 xor 6 = 17

17 xor 6 = 23

Por eso no hace falta una rutina desencriptadora, con pasar dos veces la rutina de encriptacion con la misma clave obtienes la cadena original.

cadenaencriptada:=EncriptaXOR('mmm rosquillas','homer');
// mostrara la cadena 'mmm rosquillas'
ShowMessage(EncriptaXOR(cadenaencriptada,'homer'));

Otras entradas de la web que podrian interesarte:

Sin gravatar 133
Banderita Anonimo (2005-12-28 14:34:00)

a ver..
texto = "casa grande"
length(texto) = "11"

clave = "miclave"
length(clave) = "7"

1 mod 7 = 1
2 mod 7 = 2
3 mod 7 = 3
4 mod 7 = 4
5 mod 7 = 5
6 mod 7 = 6
7 mod 7 = 0 :huh:
8 mod 7 = 1
9 mod 7 = 2
10 mod 7 = 3
11 mod 7 = 4

En delphi si buscamos el valor 0 de un string no nos dara el valor correcto (dado que empieza desde 1 en adelante).;)

La solucion podria ser:
reemplazar:
clave[i mod length(clave)]
por:
clave[i-1 mod length(clave)]+1

En JS se pued implementar como lo hiciste vos, ya que los string empiezan con 0.
Saludos :roll:
PD: muy buena la web!

Avatar 134
Banderita Saiyine (2005-12-29 23:35:00)

Absolutamente correcto.

Al principio no comprendia porqué hablabas de un mod en vez de xor, pero tienes razón, hay un momento que el mod de la clave devuelve un valor erroneo.

Se corregirá en breve, lo correcto es lo que indica el comentario anterior.

Gravatar 1383
Banderita loubens (2007-07-30 05:15:24)

como encriptar y desencriptar con una clave de seguridad.Todo eso se hace en Delphi.

Saludos,

Sin gravatar 1855
Banderita Anonimo (2008-02-15 02:28:18)

oye podrias poner el codigo completo porfa lo que pasa es que estoy iniciando en esto.

gracias

Gravatar 2040
Banderita Macchiavello (2008-04-01 02:44:40)

Hola me podeis ayudar quiero encriptar una canion pero no tengo ni idea como se hace me podeis ayudar

Gravatar 2041
Banderita Saiyine (2008-04-01 03:25:52)

Mi primera respuesta es que no lo hagas.

Si aun así quieres hacerlo, necesitas que el disco duro o pendrive donde esté la canción esté formateado como NTFS. Despues es simplemente cuestión de botón derecho, propiedades, opciones avanzadas, cifrar.

Tambien puedes usar un programa muy bueno que genera falsos discos duros con clave donde meter tus ficheros y que nadie los pueda ver, se llama Truecrypt.


Sin gravatar 2610
Banderita Anonimo (2008-08-14 02:49:33)

a ver.. con clave[i-1 mod length(clave)]+1
como proponen arriba kedaria así:

texto = "casa grande"
length(texto) = "11"

clave = "miclave"
length(clave) = "7"

(i-1) empezando con i=1
0 mod 7 = 0 :push:
1 mod 7 = 1
2 mod 7 = 2
3 mod 7 = 3
4 mod 7 = 4
5 mod 7 = 5
6 mod 7 = 6
7 mod 7 = 0 8O
8 mod 7 = 1
9 mod 7 = 2
10 mod 7 = 3



En delphi si buscamos el valor 0 de un string no nos dara el valor correcto (dado que empieza desde 1 en adelante).

La solucion podria ser:
reemplazar:
clave[i mod length(clave)]
por:
clave[i-1 mod length(clave)]+1

En JS se pued implementar como lo hiciste vos, ya que los string empiezan con 0.
Saludos
PD: muy buena la web!

Sin gravatar 2611
Banderita Anonimo (2008-08-14 02:57:55)

Perdon la anterior la envio mientras editaba.. :roll:

prosigo... con clave[i-1 mod length(clave)]+1
como proponen arriba kedaria así:

texto = "casa grande"
length(texto) = "11"

clave = "miclave"
length(clave) = "7"

(i-1) empezando con i=1
0 mod 7 = 0 :push:
1 mod 7 = 1
2 mod 7 = 2
3 mod 7 = 3
4 mod 7 = 4
5 mod 7 = 5
6 mod 7 = 6
7 mod 7 = 0 :?
8 mod 7 = 1
9 mod 7 = 2
10 mod 7 = 3

con la funcion "clave[(i mod length(clave))+1])" por el contrario kedaría

empezando con i=1
1 mod 7 = 1 + 1 = 2
2 mod 7 = 2 + 1 = 3
3 mod 7 = 3 + 1 = 4
4 mod 7 = 4 + 1 = 5
5 mod 7 = 5 + 1 = 6
6 mod 7 = 6 + 1 = 7
7 mod 7 = 0 + 1 = 1
8 mod 7 = 1 + 1 = 2
9 mod 7 = 2 + 1 = 3
10 mod 7 = 3 + 1 = 4
11 mod 7 = 4 + 1 = 5

Así que creo q está claro como debe ir ;)

Sin gravatar 2628
Banderita Anonimo (2008-08-21 11:35:51)

no ps es muy bueno lo q uno baja de aqui
ps qui les dejo mi mns xq si quieren comprobarlo ssl_snoop13@hotmail.com





Sin gravatar 4328
Banderita Anonimo (2010-03-26 04:18:15)

:OO :OO :push:

Gravatar 4737
Banderita Xakko (2010-08-20 21:52:17)

hola.
se q la pagina ya lleva un par de años, pero varios han pasado y pasaran por aqui googlenado "encriptacion xor", como yo, que, conociendo el tema (encriptacion por xor), he tenido q hacer un ingreso por usuario y pass para un sistema y, como no tenia ganas de deducir la formula (tardar, como mucho, 30 minutos mas de programacion), he decido buscarla, y aqui he caido.

Bueno, como alternativa a esta funcion, propongo las siguientes variaciones:

1) una tabla con:
a- Numero de usuario (num)
b- Nombre de usuario (nom)
c- Pass (pas)
d- Tipo de usuario (opcional, para operacion en programacion)
....

2) subida de num, nom, pas y etc (los 3 primeros, obligatorios)
3) ahora la primera variacion:
la clave con la q vamos a encriptar el pass, es el mismo 'nom' del usuario
punto en contra: podes deducir (si sabes el tema), de la misma tabla subida, el pass del usuario
puntos a favor: a) no tenes q poner la cadena general de encriptacion en la programacion, lo q hace algo vulnerable al sistema. de todas formas, si saben programar y entran a los fuentes, siempre van a sacar esa cadena, o la forma en q trabaja la encriptacion.
b) es de longitud variable, mas dificil de sacar deduciendo de varias pass, teniendo la tabla (usualmente la cadena de encriptacion no dejan de ser un juego de caracteres q pone el programador y, al ser siempre el mismo, y encima de long fija, y teniendo ya varias pass encriptadas, digamos q es 'sacable')
4) para complicar el punto en contra, tendremos q jugar con los ASC del nom o del pas (o con los dos), dentro de la programacion. OJO ACA con lo que hacen, q no genere ni overflows, ni divisiones por 0, ni decimales... en mi caso (uno facil), solo multiplique el ascii del nom por 2. aqui pueden dividir, multiplicar, exponenciar, lo que quieran. para desencriptar, HAY QUE HACER LO MISMO Y NO EL INVERSO: si hicieron *2, hagan *2 tambien, y NO /2. o sea, USEN LA MISMA FORMULA...


nom nombre de usuaro
pas contraseña
lnom longitud del nombre
lpas longitud de la contraseña

result=''
for i=1 to lclave
result = result + CHR (BITXOR (ASC (substr (pas,i,1)), ASC (substr (nom,MOD (i, lnom)+1,1))*2))
endfor (o next)


es todo

Xakko

Gravatar 4738
Banderita Xakko (2010-08-20 21:54:03)

fe de erratas:

for i=1 to lclave

es

for i=1 to lpas

o o o o 


Tu nombre (Nick):

Tu correo (Email):
  Necesario para tu gravatar!

Tu página (URL):

Escribe aqui tu comentario:

       :noworry: :roll: :huh: :push: :OO 8) 8O :( :) :? :D :P :o :x :| ;) ^^ xD



Vista previa activada.

Vista previa (6/6/6, 6:66)


Fondos de pantalla

. . .


Menuda oferta, ¿un pendrive Verbatim de 16Gb por solo 8,99€???

Descargas

  • ApagaPC
    apagapc241.exe  (4488)
  • LimpiaDocus
    LimpiaDocus001.exe  (3792)
  • RCM
    rcm001.zip  (3200)
  • Popmail
    popmail-0.4-psmn.tar.gz  (3272)
  • Manual de Delphi en PDF
    delphi_pdf.zip  (3904)
  • Evangelio del Perl
    Evangelio_del_perl.pdf  (3983)
  • Excel Simpsons
    Excel Simpsons  (3914)
  • . . .

    Proyectos Online

  • Saiyine Store
  • Kunowalls!!!
  • Fondos de pantalla
  • Picaday: imagenes sexys o chocantes.
  • Scarlett: fotos de Scarlett Johansson
  • WhatsmyIP: obtener tu IP pública
  • Uma Thurman: galeria de Uma Thurman
  • FunPics: imagenes graciosas
  • . . .

    Blogs

  • Por lo que más querais, no entreis a estos: Tapanez, Yhandros, Onez.

  • Otros en español: El Mundo Today, La libreta de Van Gaal, Chavalina, Kirai, Mundo Geek, Microsiervos.

  • Mis lecturas en guiri: Michael Yon, Coding Horror, YCombinator news, MySQL Performance, Slashdot.

    . . .
  • Utilidades

  •  Coral  (1645), cacheando webs
  •  Spam.la  (1983), correo de usar y tirar
  •  Mailinator  (1887), correo de usar y tirar
  •  Bug me not  (1635), absurdos registros di NO
  •  Trashmail  (1692), correo de usar y tirar

    . . .

  • Saipuntos

    Jomer: 2
    Yhandros: 1
    Cheimy: 1

    . . .

    Faq

  • ¿MlDonkey para windows?
    Pues si, ya hay un port, y lo podeis encontrar aqui.
  • ¿Imagenes del universo?
    Puesss, mi favorita es astrored, aunque debe haber muchas similares.
  • ¿Drivers para voodoo?
    Probad aqui para la voodoo 3.
  • . . .

    Página web ©2001-2011 Saiyine descargada en s, con 6094842 visitas en total, hoy (de un total de 0 previstas).

    . . .