Декодирование DES в C# WP 8.1

System.Security.Cryptography включает метод декодирования DES, но пространство имен Windows.Security.Cryptography для программирования Windows Phone 8.1 не включает никакого метода декодирования DES.

Я только что нашел класс Windows.Security.Cryptography.Core.SymmetricAlgorithmNames.DesCbc, но понятия не имею, как расшифровать мою зашифрованную DES-строку. Я был бы признателен за каждую вашу идею.

Думаю, я понял. Фрагмент кода:

strAsymmetricAlgName = SymmetricAlgorithmNames.DesCbc;
SymmetricKeyAlgorithmProvider objAlgProv = SymmetricKeyAlgorithmProvider.OpenAlgorithm(strAsymmetricAlgName);

CryptographicKey keyPair = objAlgProv.CreateSymmetricKey(CryptographicBuffer.ConvertStringToBinary("xxx", BinaryStringEncoding.Utf8));

IBuffer val = CryptographicEngine.Decrypt(keyPair, CryptographicBuffer.ConvertStringToBinary(encodedData, BinaryStringEncoding.Utf8), null);

byte[] arr = val.ToArray();

string returnValue = System.Text.Encoding.UTF8.GetString(arr, 0, arr.Length);

В настоящее время я не знаю вектор инициализации, поэтому он null. Я до сих пор не уверен на 100%, что это правильно. Строка DES шифруется программой Java:

Cipher c = Cipher.getInstance( "DES" );
Key k = new SecretKeySpec( pass.getBytes(), "DES" );
c.init( Cipher.ENCRYPT_MODE, k );

OutputStream cos = new CipherOutputStream( out, c );
cos.write( bytes );
cos.close()

Я не могу найти никакой информации о векторе инициализации.


person B. Kemmer    schedule 10.09.2014    source источник
comment
Почему ДЭС? 56-битный ключ не является безопасным.   -  person CodesInChaos    schedule 10.09.2014
comment
Да, я знаю это, но все же лучше, чем отсутствие шифрования. Вариант использования на самом деле не нуждается в более высоком шифровании, а шифрование DES уже давно встроено.   -  person B. Kemmer    schedule 10.09.2014
comment
DES едва ли лучше, чем ничего. Ключи DES уже можно было взломать за 24 часа 15 лет назад. (На самом деле это может быть хуже, чем ничего, потому что кто-то может подумать, что ваша система безопасна.) Если можете, перейдите на AES.   -  person ntoskrnl    schedule 10.09.2014
comment
Ну в любом случае спасибо за подсказку. Я поговорю об этом со своим руководителем.   -  person B. Kemmer    schedule 11.09.2014


Ответы (1)


Я только что решил свою проблему.

String strAsymmetricAlgName = SymmetricAlgorithmNames.DesEcbPkcs7;
SymmetricKeyAlgorithmProvider objAlgProv = SymmetricKeyAlgorithmProvider.OpenAlgorithm(strAsymmetricAlgName);

CryptographicKey keyPair = objAlgProv.CreateSymmetricKey(CryptographicBuffer.ConvertStringToBinary("key", BinaryStringEncoding.Utf8));
IBuffer str = CryptographicBuffer.CreateFromByteArray(encodedDataAsBytes);
IBuffer buf = CryptographicEngine.Decrypt(keyPair, str, null);
byte[] arr = buf.ToArray();
string returnValue = System.Text.Encoding.UTF8.GetString(arr, 0, arr.Length);
person B. Kemmer    schedule 10.09.2014
comment
Это помогло мне, когда я искал решение для переноса кода для использования в Windows Phone 8.1 (RT). Требуется, так как у нас есть несколько миллионов развернутых карт, использующих DES и TDES. Я использовал Bouncy Castle для WP8.0 SL, но теперь сломал эту зависимость. Большое спасибо. - person Nick Wright; 02.12.2014
comment
@user925327 user925327 - вам удалось зашифровать данные с помощью TripleDES? - person nipun.birla; 22.07.2015