Я полагаю, что некоторые (все?) Реализации DES используют только 7 битов на символ ключа (кодировка ASCII).Я не уверен, что определение DES допускает использование 8-битных символов в ключах или оно фактически игнорирует старший бит каждого байта.Я думаю, что это последнее.
Однако в ключах .NET размеры основаны на количестве байтов, умноженных на 8 бит на байт, даже если основной алгоритм игнорирует этот старший бит.Это, вероятно, основное несоответствие.
TripleDES запускает DES три раза с потенциально тремя различными 56-битными ключами DES.В некоторых реализациях промежуточный прогон инвертируется (шифрование-дешифрование-шифрование или «EDE»), так что использование одного и того же 56-битного ключа DES для всех трех дублирует шифрование простого DES.Это было сделано для совместимости со старыми системами, где обе используют аппаратное шифрование.Я не уверен, что TripleDESCryptoServiceProvider использует этот подход «EDE» или «EEE» (или дает вам выбор).Кроме того, один и тот же 56-битный ключ DES можно использовать для первого и третьего запуска, используя 112-битный ключ вместо 168-битного ключа, который он также может использовать.
Сертифицированный TripleDESCryptoServiceProvider не будет принимать56-битные (64-битные) ключи, потому что это на самом деле не безопасность 3DES (вы могли бы вместо этого использовать DESCryptoServiceProvider?).Одно время было определено, что 168-битный EEE (или EDE?) 3DES не обеспечивает большей безопасности, чем использование 112-битного (128-битного) ключа.Однако могут быть некоторые экстремальные (обычно недоступные) атаки, в которых короткий ключ теоретически более уязвим.Это также может относиться к вопросу EDE vs EEE.
Что касается вопроса совместимости с другими языками, классы .NET * CryptoServiceProvider - это просто API-оболочка для базовой библиотеки Windows CRYPTO.Если другие языки также используют библиотеку Windows CRYPTO, она должна быть совместимой.В противном случае вам необходимо выяснить, используют ли они EDE или EEE, и убедиться, что все используют один и тот же (вы можете иметь или не иметь гибкость в этом отношении), и, очевидно, использовать одну и ту же длину ключа.Вероятно, все они используют один и тот же порядок байтов, но если вы обнаружите, что все еще не совпадают, это может быть еще одна вещь, которую нужно проверить.Скорее всего, в Windows все они используют CRYPTO и, вероятно, будут совпадать, если вы можете установить параметры одинаково для всех из них.