我需要创建长度为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 ==
]
答案 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()将字符串填充到字符串的末尾,并在解密后稍后删除。