2010-11-24 32 views
5

Tengo una cadena de 15 dígitos para encriptar.¿La cadena cifrada tiene la misma longitud que la cadena de entrada?

He intentado utilizar varias funciones de cifrado de .NET pero todas mis cadenas cifradas tienen al menos 24, 28 o 32 de longitud.

He oído hablar de CipherMode.CTS con relleno = Ninguno que produce la misma longitud de salida que la longitud de entrada, pero parece que no puedo obtener el mismo resultado. He jugado con el tamaño de bloque, tamaño de clave y tamaño de sal.

No me importa agregar un dígito a mi cadena de entrada para que tenga 16 de longitud.

¿Alguien sabe una solución?

+1

¿qué tal rot13? ;) –

+0

Jason probablemente bromea, pero si su encriptación no necesita ser fuerte, podría usar una secuencia pseudoaleatoria de bytes que garanticen que es la misma cada vez que la ejecute, y XOR cada byte de su texto plano con bytes de la corriente. –

+0

¿Qué cifra recomendada debo usar para eso? Hay un ejemplo ... gracias! – Unomono

Respuesta

3

Si usa el modo ECB, redondeará la entrada hasta el siguiente múltiplo del tamaño del bloque, y luego producirá exactamente el mismo tamaño de salida.

Casi cada otro modo incluye/utiliza un Vector de Inicialización (IV) que hace que la salida sea un bloque más grande que la entrada (nuevamente, después de redondear la entrada al siguiente múltiplo del tamaño del bloque).

La mayoría de los sistemas de cifrado de flujo producen exactamente el mismo tamaño que la entrada, pero en las bibliotecas de cifrado típicas, los cifrados de flujo son mucho menos comunes que los cifrados en bloque. Una razón es que la distribución de claves es un problema mucho más serio con los sistemas de cifrado de flujo (al usar la misma clave dos veces con un cifrado de flujo produce un agujero de seguridad principal).

2

La palabra clave es Format-preserving encryption. Desafortunadamente, no conozco ninguna implementación de .NET (el framework ciertamente no tiene ninguna).

Cuestiones relacionadas