2013-10-25 1 views
0

У меня есть 16byte шестигранный ключ «F81AFDEA26D680BF», а также 16byte зашифрованный текст а в шестнадцатеричном как «3508D26A7064CF68». Мне нужно использовать DES для расшифровки вышеприведенного текста. Я получаю сообщение об ошибке «недопустимый символ в строке Base-64». Код Im используетсяПолучение недопустимый символ в Base-64 строки

static byte[] bytes = Encoding.ASCII.GetBytes(KeyHexAscii("F81AFDEA26D680BF")); 
public static string Decrypt(string cryptedString) 
    { 
     if (String.IsNullOrEmpty(cryptedString)) 
     { 
      throw new ArgumentNullException("The string which needs to be decrypted can not be null."); 
     } 

     DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider(); 
     MemoryStream memoryStream = new MemoryStream(Convert.FromBase64String(cryptedString)); 
     CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptoProvider.CreateDecryptor(bytes, bytes), CryptoStreamMode.Read); 
     StreamReader reader = new StreamReader(cryptoStream); 

     return reader.ReadToEnd(); 
    } 

    public static string Encrypt(string originalString) 
    { 
     if (String.IsNullOrEmpty(originalString)) 
     { 
      throw new ArgumentNullException("The string which needs to be encrypted can not be null."); 
     } 

     DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider(); 
     MemoryStream memoryStream = new MemoryStream(); 
     CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptoProvider.CreateEncryptor(bytes, bytes), CryptoStreamMode.Write); 

     StreamWriter writer = new StreamWriter(cryptoStream); 
     writer.Write(originalString); 
     writer.Flush(); 
     cryptoStream.FlushFinalBlock(); 
     writer.Flush(); 

     return Convert.ToBase64String(memoryStream.GetBuffer(), 0, (int)memoryStream.Length); 
    } 
+2

Вы передаете шестнадцатеричную (базовую 16) строку методу, который принимает базовую 64 строку. Чего вы ожидали? – Jon

+0

Мне нужно расшифровать конкретный зашифрованный 16hex, используя ключ в 16 hex. предложите мне код для этого. – user2462086

ответ

1

Ни одна из ваших данных не кодируется Base-64, так что это не функция, которую вы хотите использовать. Кажется, у вас уже есть функция KeyHexAscii, вы хотите использовать любую написанную вами функцию, которая отменяет это.

В идеале вы должны написать свои криптографические интерфейсы для работы с байтовыми массивами. Он не должен участвовать в кодировании и декодировании данных. Вы должны обрабатывать чтение данных и преобразовывать их в байты в другом месте.

+0

'KeyHexAscii' превращает hexadecimals в текст вместо байтов. Это не допустимый способ декодирования шестнадцатеричных. Так что все, что происходит в 'KeyHexAscii', неверно по определению. –