• Lunes 16 de Diciembre de 2024, 00:55

Autor Tema:  Criptografia Elgamal  (Leído 4080 veces)

Flipefr

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Criptografia Elgamal
« en: Martes 7 de Junio de 2005, 11:57 »
0
Hola, soy un gran aficionado a la criptografia pero este algoritmo de elgamal se me resiste a implentarlo en c++, lo he hecho en java builder y creo que lo tengo bien pero aún así al no tener claro como pasar los octetos de caracteres que cojo de un texto a un número pues no me da el resultado esperado (en c++, en java lo he hecho bien gracias a la clase biginteger), nada era por si alguien me podia pasar la implentacion si la tuviera o me dijera como pasar una serie de caracteres a numero y luego poder hacer el proceso inverso recuperando el texto original, perdon por la ralllada, un saludo

pitukilloloco

  • Miembro MUY activo
  • ***
  • Mensajes: 104
    • Ver Perfil
Re: Criptografia Elgamal
« Respuesta #1 en: Martes 7 de Junio de 2005, 16:45 »
0
No te entiendo bien lo que quieres. Dices que usaste una clase biginteger en Java. Yo no he programado en Java, por lo que no conozco tal clase, pero por el nombre puedo suponer que ahí manejan enteros más grandes que los normales proporcionados por el compilador. Si haces uso de esta característica y el compilador de C++ que usas no soporta enteros tan grandes como los que usas en el algoritmo, entonces debes de conseguirte o implementar una clase equivalente que haga lo mismo. Tu última consulta, de pasar una serie de caracteres a un número, me imagino que te refieres a una serie de caracteres que representan a un número ¿no?, porque, por ejemplo, la serie de caracteres "A123" no representan un número, pero "123", si. Si esta serie de caracteres lo quieres pasar a un número puedes usar la función atoi (ascii to integer) para números enteros y atof (ascii to float) para números reales. Ahora que si quieres convertir una serie de caracteres grande como esta "123456789123456789123456789" a un número, entonces, como te dije al principio, sólo consiguiendo una clase que maneje números grandes o impleméntandola tu mismo (lo cual es un ejercicio nada trivial) lo puedes conseguir. ¿Podrías poner ese algoritmo aquí para conocerlo y ver qué tan difícil está implementarlo en C++?

Flipefr

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Criptografia Elgamal
« Respuesta #2 en: Martes 7 de Junio de 2005, 21:00 »
0
Hola, muchas gracias por interesarte en mi consulta, es un algoritmo de un tema que estoy tratando en un proyecto de investigacion en criptografia, primero con lo de los numeros, sabes si hay alguna clase que me permita utilizar numeros grandes en c++ (de muchas muchas cifras) analoga a la del biginteger comentada??
Con lo segundo, el problema que tengo es lo siguiente, para poder encriptar, divido el fichero de texto que quiero encriptar en octetos de 8 bytes, son esos octetos de 8 bytes (informacion binaria) lo que quiero pasar a numero para poder aplicar el algoritmo este de elgamal (que trabajo sobre numeros), para poder así posteriormente aplicar el proceso inverso de desencriptado y a partir de la informacion que me salga recuperar el fichero original, por tanto lo que quiero es pasar cadenas como las que has puesto de "a123" a su correspondiente informacion binaria en numero, no pasar "123" a 123 simplemente, agradeceria mucho vuestra ayuda porque voy apurado con el proyecto y me es imprescindible hacer esto en c++ porque es el lenguaje que estamos utilizando (a mi se me da mejor java pero las caracteristicas de nuestro proyecto hacen que nos sea mejor desarrollarlo en c), el algoritmo lo tengo en pdf, si estas interesado me avisas y te lo paso, no se muy bien si se puede meter aqui un pdf porque es la primera vez que dejo mensajes en foros de este estilo, un saludo

pitukilloloco

  • Miembro MUY activo
  • ***
  • Mensajes: 104
    • Ver Perfil
Re: Criptografia Elgamal
« Respuesta #3 en: Miércoles 8 de Junio de 2005, 03:52 »
0
Si tu problema es convertir 8 bytes en un número, entonces no hay problema, pues C/C++ soportan el tipo long double, el cual creo haber leído en algún libro, que el estándar asegura que mínimamente debe de ser de 8 bytes. De cualquier manera, para asegurarme, en varios compiladores vi que tamaño me daba sizeof (long double) y estas fueron las respuestas:
Citar
Visual C++ 6           8 bytes
Dev C++ 4.9.9.2    12 bytes
Turbo C V2.01       10 bytes
cc de Red Hat 9    12 bytes
Borland C++ 3.1    10 bytes
y para convertir un long double teniendo los 8 bytes sólo se lo asignas con un cast o directamente desde un archivo. Por ejemplo, puedo leer de un archivo los 8 bytes y asignárselos a un long double así:
Código: Text
  1.  
  2. long double ld;
  3. fread (&ld, 8, 1, fp);
  4.  
  5.  
De lo de si conozco alguna clase que maneje número muy grandes pues no, pero en esta liga de la GNU http://directory.fsf.org/GNU/calc.html, de los fundadores del movimiento por el software libre, hay una calculadora hecha en C o C++ (no estoy seguro de en que lenguaje está hecha) que maneja números de presición arbitraria. Puedes descargar el fuente y tratar de ver qué algoritmos usaron para manejar esos números. De lo de adjuntar el archivo, si puedes hacerlo aquí mismo en este foro, sólo que ponen como requisito que el archivo sea a lo más de 128k. Puedes adjuntarlo usando el botón examinar que está antes de los botones Responder y Previsualizar el mensaje

Flipefr

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Criptografia Elgamal
« Respuesta #4 en: Miércoles 8 de Junio de 2005, 16:14 »
0
Gracias tio, ya avisare cuando pruebe a ver si me sale bien, vamos a ver si hay suerte...muchas gracias por todo!!!