ColdFusion:整数“0”不转换为ASCII字符

时间:2010-10-25 10:49:34

标签: encryption coldfusion ascii hex blowfish

我有一个字符串(由userID和日期/时间戳组成),然后我使用ColdFusion的加密(inputString,myKey,“Blowfish / ECB / PKCS5Padding”,“Hex”)加密

为了与3d派对接口,我必须执行以下操作:

  1. 将结果字符串中的每个字符对转换为HEX值。
  2. 然后将十六进制值表示为整数。
  3. 然后将生成的整数输出为ASCII字符。
  4. 所有ASCII字符组合在一起形成Bytestring。
  5. Bytestring然后转换为Base64。
  6. Base64是URL编码的,最后被发送出去(p!)
  7. 当原始cfEncrypted字符串包含“00”时,APART FROM无缝地工作。

    HEX值00转换为整数(通过函数InputBaseN)0然后拒绝正确转换为ASCII字符!

    生成的Bytestring(以及因此url字符串)搞砸了,3d方无法解密它。

    值得一提的是,我确实声明:< cfcontent type =“text / html; charset = iso-8859-1”>在页面顶部。

    有没有办法正确输出00作为ASCII?我可以避免在原始加密字符串中使用“00”吗?任何帮助将不胜感激:)

2 个答案:

答案 0 :(得分:0)

我很确定ColdFusion(以及下面的Java)使用以null结尾的字符串类型。这意味着每个字符串都包含一个且只有一个asc(0)char,这是字符串终止符。如果您尝试将asc(0)插入到字符串中,则CF会出错,因为您正在尝试创建格式错误的字符串元素。

我不确定最终解决方案是什么。我会使用toBinary()和toString(),并与你的第三方供应商讨论发送原始十六进制值或类似的变通方法。

答案 1 :(得分:0)

实际上有一个非常简单的解决方案。正在处理您的请求的信用卡公司需要您将其转换为十六进制的小写字母。处理的唯一字符是:, - ,0-9执行if else并手动将它们转换为字符串。