2

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

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

4

2 回答 2

3

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

加密会将其四舍五入为密钥块大小的倍数,比如说 64 字节。

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

于 2012-09-20T16:55:11.707 回答
2

是的。你可以这样计算。

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

  • 例如,您加密 1 个字节,它将变成 8 个字节。
  • 你加密 8 个字节,它会变成 8 个字节
  • 您加密 9 个字节,它将变为 16 个字节(适合原始数据的最小块数)

所以,formale encryptedLength = ceiling (originalLength /8) * 8

b) Base64 也有一些与块大小非常相似的东西。并且它的块大小是4。每个原来的3个字节将被转换为4个字节块

因此,对于 Base64 编码长度 = 天花板 (originalLength/3)*4

所以,最后的公式是

编码加密长度 = 天花板(天花板(原始长度/8)*8/3)*4

originalLength 这里是您计划加密的文本中的字节数(!!!不是字符!!!)。

于 2012-09-20T16:59:32.583 回答