如何使用FromBase64String 创建长度为16的byte

我需要创建一个长度为16的byte[] 。(一个字节数组,有128位用作AES加密中的Key)。

以下是有效的字符串

 "AAECAwQFBgcICQoLDA0ODw==" 

确定字符串是否为128位的算法是什么? 或者是反复试验是创建这种128位字符串的唯一方法吗?

  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(); } 

调查结果

对于256位,我们需要256/6 = 42.66个字符。 这四舍五入到43个字符。 [使其可以被4加= ]整除

对于512位,我们需要512/6 = 85.33个字符。 这是四舍五入到86 char。 [使其可被4整除== ]

对于128位,我们需要128/6 = 21.33个字符。 这被舍入到22个字符。 [使其可被4整除== ]

16字节的base64字符串将始终为24个字符,并在末尾具有==作为填充。

(至少在使用.NET方法解码时。在所有base64字符串的使用中,填充并不总是包含在内,但.NET实现需要它。)

在Base64编码中,’=’是一个特殊符号,它被添加到Base64字符串的末尾,表示这些字符的原始值没有数据。

每个char等于6个原始数据位,因此为了产生8位值,字符串长度必须可以被除以4而没有余数。 (6位* 4 = 8位* 3)。 当得到的BASE64字符串短于4n时,在末尾添加’=’以使其有效。

更新

‘==’之前的最后一个字符仅对2位信息进行编码,因此将其替换为所有可能的Base64字符将只为64种可能的组合提供4种不同的密钥。 换句话说,通过生成格式为“bbbbbbbbbbbbbbbbbbbbb ==”的字符串(其中’b’是有效的Base64字符),每个唯一键将获得15个重复键。

您可以使用PadRight()将字符串填充到其末尾,并使用char,稍后您将在解密后删除该字符。