X509Certificate序列号为字节数组? C#

时间:2011-06-17 19:12:09

标签: c# cryptography bytearray x509certificate

将序列号从X509certifiacte2转换为字节数组(用于存储)和返回的最佳方法是什么?

4 个答案:

答案 0 :(得分:1)

以下是将十六进制字符串转换为字节数组并返回的两种扩展方法:

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"

(为了更有效的实现,使用像Reflector这样的工具查看内部System.Security.Util.Hex类的代码.SerialNumber属性使用它们来转换X509Certificate类中的内部byte []字段到十六进制字符串。)

答案 1 :(得分:0)

System.Text.Encoding处理将字符串转换为字节数组。您应该能够执行以下操作(假设您使用ASCII进行文本编码):

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

并将byte []序列恢复为字符串:

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

答案 2 :(得分:0)

public static String byteArrayToHex(byte[] data)
        {
            return BitConverter.ToString(data).Replace("-", string.Empty);
        }

答案 3 :(得分:0)

您可以使用X509Certificate.GetSerialNumber。也可以从X509Certificate2访问此方法。

请注意字节顺序:

以低字节序返回X.509v3证书的序列号为字节数组。