我使用以下函数来加密字符串:
public string Encrypt(string stringToEncrypt, string SEncryptionKey)
{
try {
key = System.Text.Encoding.UTF8.GetBytes(Strings.Left(SEncryptionKey, 8));
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] inputByteArray = Encoding.UTF8.GetBytes(stringToEncrypt);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(key, IV), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
return Convert.ToBase64String(ms.ToArray());
} catch (Exception e) {
return e.Message;
}
}
我想知道是否有某种数学算法可以让我事先确定Base64加密字符串长度的长度。因此,如果我的字符串长度为15个字符,那么Base64加密字符串的长度是多少?
答案 0 :(得分:3)
15个字符的字符串至少为15个字节。如果你有很多非ASCII字符,它可能会变成20甚至30。
加密会将其四舍五入为键块大小的倍数,假设为64字节。
然后Base64将8位字节编码为6位令牌,因此得到(64 * 8)/ 6个令牌(字符)。
答案 1 :(得分:2)
是。你可以计算出来。
a)DES加密使用块。我记得它是8个字节。因此,如果您加密任何内容,它将四舍五入到块大小。
所以,女性 encryptedLength = ceiling(originalLength / 8)* 8
b)Base64还有一些与块大小非常相似的东西。它的块大小为4.每个原始3个字节将转换为4个字节块
因此,对于Base64 encodedLength = ceiling(originalLength / 3)* 4
所以,最终的公式是
encodedEncryptedLength = ceiling(ceiling(originalLength / 8)* 8/3)* 4
originalLength这里是您计划加密的文本中的字节数(!!!而不是字符!!!)。