Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create byte[] with length 16 using FromBase64String [duplicate]

I have a requirement to create a byte[] with length 16. (A byte array that has 128 bit to be used as Key in AES encryption).

Following is a valid string

"AAECAwQFBgcICQoLDA0ODw=="

What is the algorithm that determines whether a string will be 128 bit? Or is trial and error the only way to create such 128 bit strings?

CODE

    static void Main(string[] args)
    {
        string firstString = "AAECAwQFBgcICQoLDA0ODw=="; //String Length = 24
        string secondString = "ABCDEFGHIJKLMNOPQRSTUVWX"; //String Length = 24
        int test = secondString.Length;

        byte[] firstByteArray = Convert.FromBase64String((firstString));
        byte[] secondByteArray = Convert.FromBase64String((secondString));

        int firstLength = firstByteArray.Length;
        int secondLength = secondByteArray.Length;


        Console.WriteLine("First Length: " + firstLength.ToString());
        Console.WriteLine("Second Length: " + secondLength.ToString());

        Console.ReadLine();
    }

Findings:

For 256 bit, we need 256/6 = 42.66 chars. That is rounded to 43 char. [To make it divisible by 4 add =]

For 512 bit, we need 512/6 = 85.33 chars. That is rounded to 86 char. [To make it divisible by 4 add ==]

For 128 bit, we need 128/6 = 21.33 chars. That is rounded to 22 char. [To make it divisible by 4 add ==]

like image 611
LCJ Avatar asked Oct 29 '25 08:10

LCJ


1 Answers

A base64 string for 16 bytes will always be 24 characters and have == at the end, as padding.

(At least when it's decodable using the .NET method. The padding is not always inlcuded in all uses of base64 strings, but the .NET implementation requires it.)

like image 92
Guffa Avatar answered Oct 31 '25 23:10

Guffa