Pregunta

La pregunta es para cualquier idioma moderno no administrado. Lenguajes similares a C, delphi, cualquier cosa.

Me gustaría crear mi propio algoritmo de criptografía que, a diferencia de otros, reduce la longitud de la cadena cifrada.

Mi primer pensamiento fue crear mi propio sistema numérico similar a hexadimal, pero con más caracteres. Por ejemplo, [0..9] + [A..Z]. Eso haría un número de hasta 40 en un valor de un dígito. También podría agregar otros dígitos como '!,. /?) (#!' Y así sucesivamente.

Mi pregunta es cómo implementar dicho sistema numérico de la A a la Z incluyendo 0 a 9. ¿Tengo que declarar cada valor único como constante hasta 0xZZZZZZZZ? eso haría mi vida terrible

Por favor, dame tus sugerencias, ejemplos. :)

¿Fue útil?

Solución

Pensemos en esto.

Cada carácter de Base 40 ocupa 8 bits. Codifica un número del 0 al 39, que es solo un pelo más de 5 bits de información real.

Un solo byte puede representar 256 valores diferentes. Una codificación de base 40 solo representa 40 valores diferentes en ese mismo byte.

Esto parece ser una pérdida neta de 2-3 bits por byte codificado.

Habiendo dicho eso, un valor de base 40 ES una cadena y nada más. No se requiere una declaración de base de datos sofisticada, es solo una cadena.

Escribe dos funciones: toBase40 (someBytes) y toBytes (someBase40string) para convertir tus cadenas base40 en cadenas comunes.

Si desea una solución existente bien hecha, busque base64 .

Otros consejos

Necesitaría cambiar la forma en que funcionan las computadoras y el almacenamiento.

No hay memoria libre y no hay forma de obtener espacio gratis. Cambiar el sistema numérico le daría más espacio cuando lo escriba en papel, pero en la memoria de la computadora, todavía necesitará la misma cantidad de bits.

También tenga en cuenta que, si desea cifrar algo, esa operación también evita cualquier compresión significativa, ya que el contenido cifrado debe ser lo más aleatorio posible.

Generalmente, la compresión de formularios se realiza ANTES de la encriptación (GZip o algo similar) pero eso no funciona al cambiar los sistemas de números.

P.S. Utilice algún algoritmo de cifrado probado.

Por lo general, la forma en que los algoritmos de cifrado reducen el tamaño del texto cifrado es ejecutar primero el texto a través de un algoritmo de compresión de propósito general y luego cifrar el resultado comprimido. Casi siempre obtendrás un mejor resultado de esta manera que si intentas combinar los dos algoritmos en uno solo.

Las personas que han desarrollado algoritmos de cifrado han gastado probablemente millones de horas de trabajo, años en la escuela de posgrado y postdoctorados para obtener su experiencia. ¿Qué te hace pensar que puedes llegar a algo mejor?

Probablemente se te ocurra un algoritmo no seguro.

Use un algoritmo existente y use compresión.

Recomendaría simplemente comprimir la entrada (usando gzip, zlib, o lo que sea) antes de cifrarla. Esto es más fácil y más seguro que crear tu propio algoritmo. (GnuPG hace esto, por ejemplo).

Las cadenas Base64 son comunes en muchos lenguajes informáticos y es bastante estándar. Utiliza los siguientes caracteres:

  

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 + /

Consulte http://en.wikipedia.org/wiki/Base64 para obtener más información

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top