¿Cuál es el mejor algoritmo de cifrado de datos de texto basado en el valor ASCII?

Teóricamente, puede usar cualquier algoritmo de cifrado, ya que ASCII es solo una forma de leer binarios.

Sobre los problemas que tiene con el cifrado RC4 en SQL, sospecho que no tiene nada que ver con el algoritmo de cifrado, sino con la conversión que usa de / a ASCII.

También tenga en cuenta que ASCII no admite todos los caracteres especiales, ya que solo hay 256 caracteres posibles al codificar en 8 bits, como es el caso con ASCII. ¿Puedes dar algunos ejemplos de personajes especiales que plantean problemas? Si dichos caracteres especiales no están en ASCII, probablemente deba utilizar la codificación ANSI.

Dicho todo esto, la solución más fácil sería utilizar la capacidad de SQL Server en sí mismo, donde solo puede especificar que un campo / columna necesita ser encriptado (en SQL Server 2008 o posterior). Microsoft tiene una excelente página de MSDN que explica qué transacción de Transact-SQL puede usar para especificar el cifrado mediante contraseña o certificado. Aquí hay un ejemplo de cómo configurar el cifrado basado en contraseña en una columna usando la transacción ALTER TABLE:

USE AdventureWorks2012;
–Si no hay una clave maestra, cree una ahora.
SI NO EXISTE
(SELECCIONAR * DESDE sys.symmetric_keys DONDE symmetric_key_id = 101)
CREAR ENCRIPTACIÓN DE CLAVE MAESTRA POR
CONTRASEÑA = ‘23987hxJKL95QYV4369 # ghf0% lekjg5k3fd117r $$ # 1946kcj $ n44ncjhdlj’
IR

CREAR CERTIFICADO Ventas09
WITH SUBJECT = ‘Números de tarjeta de crédito del cliente’;
IR

CREAR CLAVE SIMÉTRICA CreditCards_Key11
CON ALGORITMO = AES_256
ENCRIPTACIÓN POR CERTIFICADO Sales09;
IR

– Cree una columna en la que almacenar los datos cifrados.
ALTER TABLE Sales.CreditCard
AGREGAR CardNumber_Encrypted varbinary (128);
IR

– Abra la clave simétrica con la que cifrar los datos.
LLAVE SIMÉTRICA ABIERTA CreditCards_Key11
DECRIPCIÓN POR CERTIFICADO Sales09;

– Cifre el valor en la columna CardNumber usando el
– clave simétrica CreditCards_Key11.
– Guarde el resultado en la columna CardNumber_Encrypted.
ACTUALIZACIÓN Sales.CreditCard
SET CardNumber_Encrypted = EncryptByKey (Key_GUID (‘CreditCards_Key11’)
, CardNumber, 1, HashBytes (‘SHA1’, CONVERT (varbinary
, CreditCardID)));
IR

– Verificar el cifrado.
– Primero, abra la clave simétrica con la que descifrar los datos.

LLAVE SIMÉTRICA ABIERTA CreditCards_Key11
DECRIPCIÓN POR CERTIFICADO Sales09;
IR

– Ahora enumere el número de tarjeta original, el número de tarjeta encriptada,
– y el texto cifrado descifrado. Si el descifrado funcionó,
– el número original coincidirá con el número descifrado.

SELECT CardNumber, CardNumber_Encrypted
COMO ‘Número de tarjeta cifrada’, CONVERTIR (nvarchar,
DecryptByKey (CardNumber_Encrypted, 1,
HashBytes (‘SHA1’, CONVERT (varbinary, CreditCardID))))
COMO ‘Número de tarjeta descifrado’ DE Sales.CreditCard;
IR

Lo mejor que puede hacer es ejecutar los datos a través de un cifrado fuerte, como AES-128 (o superior), y luego simplemente ejecutarlos a través de un filtro base64 para obtener ‘texto plano’.

Si está preguntando algo más, como “¿Qué codifica mejor los archivos de texto?” La respuesta es esta: un buen algoritmo de cifrado no dará ninguna pista de que el archivo es un archivo de texto (quizás más allá de su tamaño). el algoritmo de encriptación sugiere que el archivo probablemente sea texto sin formato, ya no ha podido opacar los datos. AES puede aumentar un poco el tamaño del archivo, y esto es bueno. Piensa en cuántas oraciones comienzan con la letra ‘T’. Si adivina que el primer texto sin formato del archivo es ‘T’, puede reducir la cantidad de contraseñas que debe intentar para obtener el texto claro completo del archivo. Si ni siquiera se sabe cuáles son los primeros personajes, entonces no puedes hacer conjeturas como esa, y estás de regreso al principio. Muchos algoritmos de cifrado incluyen sal, que es solo un par de bytes para tirar. Es el equivalente de un número aleatorio, por lo que el texto simple que viene después es mucho más difícil de adivinar.