2014-09-10 2 views
0

Система System.Security.Cryptography включает в себя метод DES Decode, но пространство имен Windows.Security.Cryptography для программирования в Windows Phone 8.1 не содержит каких-либо методов декодирования DES.DES Декодирование в C# WP 8.1

Я только что нашел класс, 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() 

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

+1

Почему DES? 56-битный ключ не является безопасным. – CodesInChaos

+0

Я знаю это, но все же лучше, чем отсутствие шифрования. В случае использования на самом деле не требуется более высокое шифрование, и шифрование DES уже построено давным-давно. –

+0

DES только лучше, чем ничего. Классы DES уже могут быть разбиты через 24 часа 15 лет назад. (На самом деле это может быть хуже, чем ничего, потому что это может заставить кого-то поверить, что ваша система безопасна.) Если вы можете, перейдите на AES. – ntoskrnl

ответ

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); 
+0

Это работало для меня при поиске решения для кода порта для использования в Windows Phone 8.1 (RT). Требуется, поскольку у нас есть несколько миллионов развернутых карт с использованием DES и TDES. Я использовал Bouncy Castle для WP8.0 SL, но теперь нарушил эту зависимость. Большое спасибо. –

+0

@ user925327 - можно ли зашифровать данные с помощью tripleDES? –

Смежные вопросы