Wierzę, że niektóre (wszystkie?) Implementacje DES używają tylko 7 bitów na znak klucza (kodowanie ASCII). Nie jestem pewien, czy definicja DES pozwala na 8-bitowe znaki w kluczach, czy też faktycznie ignoruje wysoki bit każdego bajtu. Myślę, że to drugie.
Jednak w kluczach .NET rozmiary są zależne od liczby bajtów, razy 8 bitów na bajt, nawet jeśli bazowy algorytm ignoruje ten najwyższy bit. To prawdopodobnie główna rozbieżność.
TripleDES działa DES trzy razy z potencjalnie trzema różnymi 56-bitowymi kluczami DES. W niektórych implementacjach, środkowy przebieg jest odwrócony (szyfrowanie-deszyfrowanie-szyfrowanie lub "EDE"), więc użycie tego samego 56-bitowego klucza DES dla wszystkich trzech duplikuje szyfrowanie prostego DES. Dokonano tego w celu zapewnienia zgodności ze starszymi systemami, w których oba używają szyfrowania sprzętowego. Nie jestem pewien, czy TripleDESCryptoServiceProvider używa tego podejścia "EDE" lub "EEE" (lub daje ci wybór). Co więcej, ten sam 56-bitowy klucz DES może być użyty do pierwszego i trzeciego uruchomienia, używając klucza 112-bitowego zamiast klucza 168-bitowego, którego mógłby również użyć.
Certyfikowany program TripleDESCryptoServiceProvider nie akceptowałby kluczy 56-bitowych (64-bitowych), ponieważ nie jest tak naprawdę zabezpieczeniem 3DES (zamiast tego można użyć DESCryptoServiceProvider?). W pewnym momencie ustalono, że 168-bitowy EEE (lub EDE?) 3DES nie zapewnia większego bezpieczeństwa niż przy użyciu 112-bitowego klucza (128-bitowego). Mogą jednak wystąpić ekstremalne (zazwyczaj niedostępne) ataki, w których krótszy klucz teoretycznie jest bardziej podatny na ataki. Może to również dotyczyć pytania EDE i EEE.
W przypadku pytań dotyczących zgodności z innymi językami, klasy .NET * CryptoServiceProvider to tylko interfejs API otaczający bibliotekę Windows CRYPTO.Jeśli inne języki również używają biblioteki Windows CRYPTO, powinna być kompatybilna. W przeciwnym razie musisz sprawdzić, czy używają EDE lub EEE i upewnić się, że wszyscy używają tego samego (możesz mieć lub nie ma na to elastyczności) i oczywiście używać tej samej długości klucza. Prawdopodobnie wszystkie używają tej samej kolejności bajtów, ale jeśli okaże się, że rzeczy nadal nie pasują do siebie, może to być kolejna rzecz do sprawdzenia. Najprawdopodobniej w systemie Windows wszystkie używają CRYPTO i prawdopodobnie będą pasować tak długo, jak długo możesz ustawić opcje w taki sam sposób dla wszystkich.
trzech dniach patrząc na bezużytecznych przykładów wtedy ta odpowiedź pomogła mi zrozumieć, jak .NET obsługuje klucze 128bit i CCCrypt siły funkcyjnych you into 192bit. .. kopiuje pierwsze 64-bitowe 128-bitów na końcu, więc K3 = K1. iOS <-> Interoperacyjność # .Net. Tak prosty. –