ColdFusion的binaryDecode(input, 'base64')
是挑剔的,因为填充是强制性的。如何在解码base64字符串之前添加填充?
将=
的填充添加到base64值的正确方法是什么?
value &= repeatString("=", (4 - (len(value) % 4)));
<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 =
's。 Wikipedia on Base64 Padding似乎表明有效的base64值应该只有1或2个=
's。
第一个解决方案似乎适用于所有base64值的长度,但它有时可能会返回3或4 =
's,这有点奇怪。如果第二种解决方案可能失败,其余数为1的base64值。CF抛出The input and output encodings are not same.
为什么你需要做自己的填充? – Leigh
Json Web Token中的@Leigh Base64URL通常/始终删除填充。要将这样的值提供给'binaryDecode(input,'base64')',必须添加填充。 – Henry