将序列号从X509certifiacte2转换为字节数组(用于存储)和返回的最佳方法是什么?
答案 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)