ColdFusion的binaryDecode(input, 'base64')
很挑剔,因为填充是必需的。
如何以=
添加填充到一个base64值的正确方式是什么?
1.) Ben Nadel使用:
value &= repeatString( "=", ( 4 - ( len( value ) % 4 ) ) );
2.) Arlo Carreon使用
<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个等号。维基百科关于Base64填充的页面表明,一个有效的base64值应该只有1或2个等号。
第一种方法似乎适用于所有的base64值长度,但有时会返回3或4个等号,这有点奇怪。而第二种方法可能会在余数为1的base64值上失败。CF会抛出“输入和输出编码不同”的错误。
binaryDecode(input, 'base64')
,必须添加填充。 - Henry