No hay forma de que una biblioteca de cifrado moderna funcione con caracteres. Todos los cifrados modernos están definidos para operar en bytes (algunos están definidos para operar en bits, pero la mayoría de las bibliotecas asumirán que un byte es la unidad mínima de datos). Si su biblioteca acepta cadenas de caracteres , se convertirán a bytes dentro. Tenga en cuenta que, por ejemplo, std:string
no no tiene que contener cadenas de caracteres, también puede contener cadenas de bytes (a.k.a. cadenas de octetos) también.
Por otro lado, la mayoría de las bibliotecas de encriptación utilizan el rango completo del espacio de claves. Esto significa que los bytes que forman la clave pueden tener cualquier valor. Entonces, siempre que su clave codificada en la base 64 tenga un tamaño de clave válido, puede ser aceptada. En ese caso, el único problema es que base64 contendrá 3/4 de la entropía de una clave totalmente aleatoria. Por lo tanto, si tiene una clave AES de 192 bits, se convertirá en una clave AES de 256 bits. En ese caso, no debe reclamar seguridad de 256 bits, ya que la cantidad de claves posibles en su esquema es todavía 2 ^ 192.
Si la biblioteca de encriptación en sí misma decodifica la base64, primero su clave se convierte 1: 1 a base64 y luego vuelve a la clave original. Obviamente, en tal caso, la base 64 no hace una diferencia. Es de esperar que la conversión de base64 o hexadecimals esté bien documentada para la biblioteca.
Parece que hay muy poca información disponible para Synercoding.Encryption, eso no es una buena señal.
Si la clave no es una clave, sino una contraseña ingresada en PBKDF2, solo debe proporcionarle suficiente entropía. Si se alimenta directamente a PBKDF2 o si primero se codifica como base64 no hay diferencia.
Lo suficientemente divertido para una función basada en contraseña PBKDF2 también se define para operar en bytes. Por lo tanto, la API también debe especificar la codificación de caracteres. Sin embargo, generalmente es compatible con ASCII, por lo que es probable que la base 64 funcione. Incluso se puede utilizar como algún tipo de capa de compatibilidad entre implementaciones de PBKDF2.