C# байтовый массив в строку

Я прочитал несколько статей об этом, и я думаю, что есть переменная, которую я здесь не рассматриваю.

Я прохожу чей-то код, где реализовано шифрование Triple-Des. У них нет ключа и iv хранится где-то в виде строки. Только как байтовые массивы.

Мне нужно сделать тот же вызов шифрования / дешифрования вне C#, поэтому я пытаюсь выяснить, какие ключи используются.

Вещи, которые я пробовал:

byte[] key; // this is set
byte[] iv; // this is set

Convert.ToBase64String(key);
Encoding.Default.GetString(key);
Encoding.ASCII.GetString(key);
Encoding.UTF8.GetString(key);

Может быть, результаты одного из них верны, но мне нужно сделать другое преобразование, чтобы закодировать его?

В случае, если это имеет значение, я просто пытаюсь использовать эти ключи с openssl через ruby ​​или node.js.

Что бы это ни стоило, я также попытался создать массив байтов в ruby ​​и создать пакет для них, но все равно кажется неправильным результатом.

2 ответа

Вы пытались использовать прямое шестнадцатеричное представление ваших байтовых массивов?

string keyHex = BitConverter.ToString(key).Replace("-", "");
string ivHex = BitConverter.ToString(iv).Replace("-", "");

(Вам также может понадобиться нижний регистр строк и / или префикс их 0xв зависимости от того, насколько суетливы другие системы.)

Хорошо, мне также пришлось воспроизвести рутинную криптографическую программу.NET в коде Ruby. После нескольких часов ударившись головой о стену, вот что я понял. Забудьте о Base64, используйте этот код для части C#:

BitConverter.ToString (key).Replace ("-", "")

Сохраните результат. Теперь определите эту функцию в Ruby:

def self.hex_to_bin(s) 
  s.scan(/../).map { |x| x.hex.chr }.join
end

И вызовите его с выводом из части C#, он преобразует строку hexa в строку bin. Для меня заключалась сделка по конвертации на стороне Ruby. Это работает как для iv, так и для ключа.

Другие вопросы по тегам