gpt4 book ai didi

coldfusion - 如何在解码 base64 字符串之前添加填充?

转载 作者:行者123 更新时间:2023-12-04 13:46:24 24 4
gpt4 key购买 nike

ColdFusion 的 binaryDecode(input, 'base64')很挑剔,因为填充是强制性的。

使用 = 添加填充的正确方法是什么?到 base64 值?

1.) Ben Nadel uses :

value &= repeatString( "=", ( 4 - ( len( value ) % 4 ) ) );

2.) Arlo Carreon uses
<cfset res = Len(raw_str) % 4>
<cfif res eq 2>
<cfset raw_str &= "==">
<cfelseif res eq 3>
<cfset raw_str &= "=">
</cfif>

虽然它们似乎都有效,但第一个解决方案可能会返回 1 到 4 =的,而第二个解决方案可能会返回 0、1 或 2 =的。 Wikipedia on Base64 Padding似乎表明有效的 base64 值应该只有 1 或 2 =的。

第一个解决方案似乎适用于所有 base64 值长度,但有时可能会返回 3 或 4 =这有点奇怪。对于余数为 1 的 base64 值,第二个解决方案可能会失败。CF 抛出 The input and output encodings are not same.

最佳答案

规范(RFC 2045、3548/4648)强制要求填充。

Implementations MUST include appropriate pad characters at the end of encoded data unless the specification referring to this document explicitly states otherwise.



修复缺失填充的正确方法是附加 =直到 ( len(value) % 4 ) eq 0 .这意味着正确填充的 Base64 字符串只能结束:
  • 没有 =
  • =
  • ==

  • 该规范允许(“可能”)忽略过多的填充。

    If more than the allowed number of pad characters is found at the end of the string (e.g., a base 64 string terminated with "==="), the excess pad characters MAY also be ignored.



    你能详细说明你的意思 The input and output encodings are not same. ?这听起来像是一个无效的 Base64 编码字符串。您可能想查看什么 toBinary()为输入返回。它可能会告诉你 The parameter 1 of function ToBinary, which is now ... must be a base-64 encoded string ,这正是问题所在。

    关于coldfusion - 如何在解码 base64 字符串之前添加填充?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34278297/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com