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

时间:2013-02-19 09:38:29

标签: c# .net encryption cryptography base64

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

以下是有效的字符串

"AAECAwQFBgcICQoLDA0ODw=="

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

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

首饰

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

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

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

3 个答案:

答案 0 :(得分:6)

16字节的base64字符串总是24个字符,最后有==作为填充。

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

答案 1 :(得分:3)

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

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

<强>更新

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

答案 2 :(得分:0)

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