X509Серийный номер сертификата как массив байтов?C # - PullRequest
1 голос
/ 17 июня 2011

Каков наилучший способ преобразования серийного номера из X509certifiacte2 в байтовый массив (для хранения) и обратно?

Ответы [ 3 ]

1 голос
/ 17 июня 2011

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

static byte[] ParseAsBytes(static string s)
{
    return Enumerable.Range(0, s.Length / 2)
                     .Select(i => byte.Parse(s.Substring(i * 2, 2), 
                                             NumberStyles.AllowHexSpecifier))
                     .ToArray();
}

static string ToHexString(this byte[] buffer)
{
    return string.Concat(buffer.Select(i => i.ToString("X2")));
}

Использование:

var input = "0001020304050607";

var bytes = input.ParseAsBytes();
// bytes == new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }

var result = bytes.ToHexString();
// result == "0001020304050607"

(Для более эффективных реализаций посмотрите код внутреннего класса System.Security.Util.Hex, используя инструмент, подобный Reflector. Они используются свойством SerialNumber для преобразования внутреннего поля byte [] в классе X509Certificate в шестнадцатеричную строку.)

0 голосов
/ 18 июня 2011
public static String byteArrayToHex(byte[] data)
        {
            return BitConverter.ToString(data).Replace("-", string.Empty);
        }
0 голосов
/ 17 июня 2011

System.Text.Encoding обрабатывает преобразование строк в / из байтового массива.Вы должны быть в состоянии сделать следующее (при условии, что вы используете ASCII для кодирования текста):

byte[] serial = System.Text.Encoding.ASCII.GetBytes(x509_cert.SerialNumber);

и вернуть последовательный байт [] обратно в строку:

string x509_serial = System.Text.Encoding.ASCII.GetString(serial);
...