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, так и для ключа.