2010-06-16 14 views
15

Tengo una cadena de 10-15 caracteres y quiero encriptar esa cadena. El problema es que quiero obtener una cadena encriptada lo más corta posible. También querré descifrar esa cadena de nuevo a su cadena original.¿Qué algoritmo de cifrado es mejor para cadenas pequeñas?

¿Qué algoritmo de cifrado se adapta mejor a esta situación?

+2

¿Es un requisito que el cifrado sea "difícil" (en este caso solo quiero decir no trivial) para crackear, o es solo para acortar las cadenas? –

+0

acortando la cuerda, y "más difícil de romper" es solo una bonificación –

Respuesta

7

AES utiliza un tamaño de bloque de 16 bytes; es admirablemente adecuado para sus necesidades si su límite de 10-15 caracteres es firme. El esquema de relleno PKCS # 11 (IIRC) agregaría 6-1 bytes a los datos y generaría una salida de exactamente 16 bytes. Realmente no necesita usar un modo de encriptación (como CBC) ya que solo está encriptando un bloque. Existe un problema con la forma en que manejaría las claves; siempre hay un problema de cómo maneja las claves de cifrado.

Si debe ir con longitudes de datos más cortas para cadenas más cortas, entonces probablemente deba considerar AES en modo CTR. Utiliza la clave y un contador para generar una secuencia de bytes que está XOR con los bytes de la cadena. Dejaría su cadena encriptada en la misma longitud que la cadena de entrada de texto sin formato.

Tendrá dificultades para encontrar un algoritmo de compresión de propósito general que reduzca de manera confiable la longitud de tales cadenas cortas, por lo que comprimir antes de encriptar es apenas una opción.

1

Si el objetivo principal es acortar, buscaría una biblioteca de compresión que permita un diccionario fijo construido sobre un corpus de cadenas comunes.
Personalmente no tengo experiencia con eso, pero apuesto a que LZMA puede hacer eso.

Cuestiones relacionadas