Creo que algunas (¿todas?) Implementaciones de DES usan solo 7 bits por carácter de la clave (codificación ASCII). No estoy seguro si la definición de DES permite caracteres de 8 bits en las claves o si realmente ignora el bit alto de cada byte. Creo que es el último.
Sin embargo, en tamaños de clave .NET se basan en el número de bytes, multiplicado por 8 bits por byte, incluso si el algoritmo subyacente ignora ese bit superior. Esa es probablemente la principal discrepancia.
TripleDES ejecuta DES tres veces con potencialmente tres claves DES diferentes de 56 bits. En algunas implementaciones, el ciclo medio se invierte (encriptación-descifrado-encriptación o "EDE") para que al usar la misma clave DES de 56 bits para las tres duplique el cifrado de DES simple. Esto se hizo por compatibilidad con sistemas más antiguos donde ambos usan cifrado basado en hardware. No estoy seguro si el TripleDESCryptoServiceProvider usa este enfoque "EDE" o el enfoque "EEE" (o le da una opción). Además, la misma clave DES de 56 bits se puede usar para la primera y tercera ejecución, usando una clave de 112 bits en lugar de la clave de 168 bits que también podría usar.
El TripleDESCryptoServiceProvider certificado no acepta claves de 56 bits (64 bits) porque en realidad no es seguridad 3DES (¿podría usar DESCryptoServiceProvider en su lugar?). Al mismo tiempo, se determinó que el EEE (o EDE?) 3DES de 168 bits no proporciona una mayor seguridad que el uso de una clave de 112 bits (128 bits). Sin embargo, puede haber algunos ataques extremos (generalmente no disponibles) en los cuales la clave más corta es teóricamente más vulnerable. Eso también puede aplicarse a la pregunta EDE vs EEE.
En su pregunta de compatibilidad frente a otras lenguas, las clases .NET * CryptoServiceProvider son solo una API contenedora alrededor de la biblioteca subyacente de Windows CRYPTO.Si los otros lenguajes también usan la biblioteca Windows CRYPTO, debería ser compatible. De lo contrario, tendría que averiguar si están usando EDE o EEE y asegurarse de que todos estén usando el mismo (puede o no tener flexibilidad) y obviamente usar la misma longitud de clave. Probablemente todos estén usando el mismo orden de bytes, pero si encuentras que las cosas aún no coinciden, podría ser otra cosa que verifique. Lo más probable es que en Windows todos estén usando CRYPTO y probablemente coincidan siempre que pueda establecer las opciones de la misma manera para todos ellos.
tres días de mirar ejemplos inútiles entonces esta respuesta ayudó a darme cuenta de lo .Net soporta claves de 128 bits y los CCCrypt función le obliga a 192bit. .. copia los primeros 64 bits de los 128 bits en el extremo, así que K3 = K1. iOS <-> Interoperabilidad C# .Net. Tan sencillo. –