Pregunta

Estoy jugando con El Gamal Cryptosystem, y mi objetivo es poder encender y descifrar secuencias de texto largas.

El Gamal requiere que el texto sin formato sea un entero. Convirtí mi cadena en un byte [] usando el método .getBytes () para cadenas, y luego creé un biginteger fuera del byte []. Después del cifrado/descifrado, convierto el biginteger en un byte [] usando el método .tobytearray () para bigIntegers, y luego creo un nuevo objeto de cadena desde el byte [].

Estoy usando una tecla de 1035 bits, y esto funciona perfectamente cuando enciero/descifro con cadenas de hasta 129 caracteres. Con 130 o más caracteres, la salida producida a partir de mi método de descifrado está confuso.

¿Alguien puede sugerir cómo resolver este problema?

¿Fue útil?

Solución

Al igual que en RSA, no puede cifrar un valor más grande que el módulo en Elgamal.

Otros consejos

Puedes probar

BigInteger pText = new BigInteger(plaintext.getBytes("UTF-8"));

Para que la codificación/decodificación y la enciadora/descifrando más simétrica, pero no estoy seguro de si esa es la causa raíz.

Por cierto, nunca debes consumir en silencio un Exception. Lo menos que puedes hacer es simplemente catch (UnsupportedEncodingException e).

Debe usar números positivos para sus operaciones. Entonces debes construir biginteger así,

BigInteger pText = new BigInteger(1, plaintext.getBytes());
// 1: select a random integer k such that 1 <= k <= p-2
BigInteger k = abs(new BigInteger(p.bitLength() - 2, sr));

Si desea cifrar ciertos datos con algoritmo criptográfico asimétrico, puede hacerlo solo para un bloqueo de datos realmente corto. Las razones son "técnicas" (el algoritmo funciona de esta manera) y "práctico" (la criptografía asimétrica es lento).

La forma correcta de cifrar el gran bloque de datos utilizando algoritmo criptográfico asimétrico es

  1. Genere la clave aleatoria ("Sesión") para algún algoritmo simétrico (AES, RC4, 3DES, lo que sea).
  2. Use este algoritmo para cifrar los datos
  3. Use su algoritmo asimétrico para cifrar la clave de la sesión
  4. Almacene la clave cifrada cerca de los datos.
  5. Deja de reinventar la rueda
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top