I need to generate a serial number for a self signed X509Certificate. Serial numbers must be a positive integer of 20 bytes
I have a method that generates a random byte array of a given length, but I am having trouble using it to generate a 20 byte array of hex values.
        public static byte[] GenerateRandomByteArray(int Length)
        {
            char[] availableCharacters = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
            var identifier = new char[Length];
            var randomData = new byte[Length];
            var key = new byte[Length];
            using (var rng = new RNGCryptoServiceProvider())
            {
                rng.GetBytes(randomData);
            }
            for (var i = 0; i < identifier.Length; i++)
            {
                var pos = randomData[i] % availableCharacters.Length;
                identifier[i] = availableCharacters[pos];
                key[i] = Convert.ToByte(identifier[i]);
            }
            return key;
        }
Using this method I get serial numbers that are the ToString() representation of the byte's decimal value.
    [0]: 65 'A'
    [1]: 54 '6'
    [2]: 48 '0'
    [3]: 69 'E'
    [4]: 53 '5'
    [5]: 50 '2'
    [6]: 50 '2'
    [7]: 56 '8'
    [8]: 52 '4'
    [9]: 56 '8'
    [10]: 51 '3'
    [11]: 57 '9'
    [12]: 51 '3'
    [13]: 66 'B'
    [14]: 48 '0'
    [15]: 55 '7'
    [16]: 67 'C'
    [17]: 65 'A'
    [18]: 57 '9'
    [19]: 57 '9'
turns into 41 36 30 45 35 32 32 38 34 38 33 39 33 42 30 37 43 41 39 39
How do generate a serial number is the ToString of the hex value?
 
    