【问题标题】:Base64 encoded data maximum sizeBase64 编码数据最大大小
【发布时间】:2011-09-30 10:32:44
【问题描述】:

我有一个实现对称算法RijndaelManaged的安全机制。我设法使用 RijndaelManaged 查找特定 IV 的加密数据的最大大小是多少。根据我的计算,它将是 128 字节。但是我需要使用 Base64 将这 128 个字节转换为字符串。有没有办法计算 Base64 编码用于对大小为 128 的输入字节数组进行编码的最大字符数?

谢谢,帕维尔

【问题讨论】:

    标签: .net security encoding base64


    【解决方案1】:

    绝对 - Base64 需要 4 个字符来表示每 3 个字节。 (填充适用于不是 3 个字节的精确倍数的二进制数据。)所以 128 个字节总是 172 个字符。 (解决方法是 base64 表示每个字符中的 6 位(26 = 64);因此 3 个字节 = 24 位 = 4 个 base-64 字符。)

    【讨论】:

      【解决方案2】:

      base 64 编码的字符串每 3 个字节(或其中一部分)使用 4 个字符。所以 128 个字节就是 172 个以 64 个字符为基数的字符。

      【讨论】:

      • 我得到一个长度为 172 个字符的字符串,但是当我显示 string.getBytes().length 时,长度也是 172。我只想要 128 个字节。
      • @UsmanRana:最好通过提出一个新问题来回答。尽管您可能实际上并没有正确使用 Base64 编码/解码功能。我不确定在这种情况下string.getBytes() 是什么,因为字符串没有这样的方法。如果您使用的是 Encoding.GetBytes,那么我希望它是相同的。您可能没有使用Convert.FromBase64String,因为输出的长度不同。基本上你需要更多的信息才能回答这个问题,而 cmets 不是提供这个的地方。
      • 尽管您提出问题后,请随时在此处链接,我会看看。
      • 感谢您的回答。请参考以下链接stackoverflow.com/questions/38632955/…
      • @UsmanRana 嗨,伙计,我正在浏览这篇文章,看到你说它返回了 172 个字符,而你只想要 128 个字节。在这种情况下,字符的长度与字节无关。这是因为每 4 个字符代表 3 个字节。字符长度与使用的字节数不同。你计数器的长度是 172 每个 4 = 3 "Math" 172 / 4 * 3 的字节数与 172 * 0.75 相同,即 129 即 128 个字节。
      【解决方案3】:

      如果您需要以编程方式检查,可以通过检查模数来实现。这是一些伪代码(没有特定语言):

      函数 base64Inflation (numBytes) minimumBase64Bytes = roundDown(numBytes / 3 * 4) 模数 = numberOfBytes % 3 // 假设 % 是模运算符 如果模数 == 0 return minimumBase64Bytes // 完全适合!不需要填充。 别的 return minimumBase64Bytes + 4 // 不太合适。我们需要垫。

      我也在 golang 中实现了同样的逻辑:

      http://play.golang.org/p/JK9XPAle5_

      【讨论】:

        【解决方案4】:

        Java 中:

        byte[] bytes = new byte[128];
        int base64Length = bytes.length / 3 * 4; // Strictly integer division
        if (bytes.length % 3 != 0)
        {
            base64Length += 4; // Extra padding characters will be added
        }
        System.out.println(bytes.length + " bytes will be encoded in " + base64Length + " characters.");
        

        所以,在输入bytes.length == 128的地方,输出将是base64Length == 172个字符。

        【讨论】:

          猜你喜欢
          • 2019-08-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多