0

Я хочу зашифровать некоторый текст, используя TripleDES Encryption с использованием режима шифрования ECB в приложении Windows Store (Windows 8.1), но у меня возникают проблемы с созданием ключа для симметричного алгоритма.TripleDES Encryption в приложении Windows Store (Windows 8.1)

Я хотел бы сказать вам, что я сейчас делаю в .NET 4.5

public static string EncryptData(string Message, string passphrase) 
     { 
      byte[] tpinBytes = System.Text.Encoding.ASCII.GetBytes(Message); 
      string tpinHex = ByteArrayHelper.ByteArrayToHexString(tpinBytes); 

      byte[] Results; 

      byte[] TDESKey = ByteArrayHelper.HexStringToByteArray(passphrase); 

      TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider(); 
      TDESAlgorithm.Key = TDESKey; 
      TDESAlgorithm.Mode = CipherMode.ECB; 
      TDESAlgorithm.Padding = PaddingMode.Zeros; 

      byte[] DataToEncrypt = ByteArrayHelper.HexStringToByteArray(tpinHex); 
      try 
      { 
       ICryptoTransform Encryptor = TDESAlgorithm.CreateEncryptor(); 
       Results = Encryptor.TransformFinalBlock(DataToEncrypt, 0, DataToEncrypt.Length); 
      } 
      finally 
      { 
       TDESAlgorithm.Clear(); 
      } 
      return ByteArrayHelper.ByteArrayToHexString(Results); 
     } 

Теперь, я написал этот фрагмент кода для моего Windows Store (Windows 8.1) приложения;

private static string TripleDESEncryption(string strMsg, string passphrase) 
     { 
      String strAlgName = SymmetricAlgorithmNames.TripleDesEcb; 
      var bytes = System.Text.Encoding.UTF8.GetBytes(strMsg); 
      string hex = BitConverter.ToString(bytes).Replace("-", ""); 

      // Initialize the initialization vector 
      IBuffer iv = null; 

      // Create a buffer that contains the encoded message to be encrypted. 
      IBuffer DataToEncrypt = CryptographicBuffer.DecodeFromHexString(hex); 

      // Open a symmetric algorithm provider for the specified algorithm. 
      SymmetricKeyAlgorithmProvider objAlg = SymmetricKeyAlgorithmProvider.OpenAlgorithm(strAlgName); 

      // Create a symmetric key. 
      IBuffer TDESKey = CryptographicBuffer.DecodeFromHexString(passphrase); 
      CryptographicKey key = objAlg.CreateSymmetricKey(TDESKey); // Line of problem. 

      // Encrypt the data and return. 
      IBuffer buffEncrypt = CryptographicEngine.Encrypt(key, DataToEncrypt, iv); 

      return CryptographicBuffer.EncodeToHexString(buffEncrypt); 
     } 

Когда я сопоставляю значения TDESKey и EncryptData, они идентичны. Однако проблема возникает, когда я пытаюсь создать симметричный ключ (после назначения TDESKey). Это дает мне ошибку . Значение не входит в ожидаемый диапазон, и в соответствии с MSDN forums размер блока может не поддерживаться (что я не могу понять), и у него даже нет тех свойств, которые указаны на этом форуме (например, SupportedKeyLengths).

Может ли кто-нибудь помочь мне с образцом или указать на ошибку, которую я делаю?

+0

как вы размещаете paddingmode.zeros в приложении вдов? –

+0

Я не думаю, что есть способ сделать это. Это? :) –

+0

У вас есть решение? Я также получаю ту же ошибку – asitis

ответ

0

WinRT не поддерживает 16-байтовые ключи. Попробуйте 24-байтовый ключ.

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