试图获取加密字符串的长度

时间:2012-09-20 16:41:58

标签: c# encryption base64 des

我使用以下函数来加密字符串:

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加密字符串的长度是多少?

2 个答案:

答案 0 :(得分:3)

15个字符的字符串至少为15个字节。如果你有很多非ASCII字符,它可能会变成20甚至30。

加密会将其四舍五入为块大小的倍数,假设为64字节。

然后Base64将8位字节编码为6位令牌,因此得到(64 * 8)/ 6个令牌(字符)。

答案 1 :(得分:2)

是。你可以计算出来。

a)DES加密使用块。我记得它是8个字节。因此,如果您加密任何内容,它将四舍五入到块大小。

  • 例如,您加密1个字节,它将是8个字节。
  • 您加密8个字节,它将变为8个字节
  • 您加密9个字节,它将变为16个字节(最小块数以适应原始数据)

所以,女性 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这里是您计划加密的文本中的字节数(!!!而不是字符!!!)。