Google 允许您为 reCAPTCHA 创建一个“安全令牌”,这意味着您可以在多个域中使用相同的密钥/秘密。无需为您照顾的每个域创建密钥/秘密。
这是他们的文档,您可以看到,除了Java 中的示例之外,它对令牌的加密方式一无所知。我的问题是这将如何用 ColdFusion 编写。我已经破解了 4 个小时,但就是无法让它工作。我审查过的其他示例:
任何 ColdFusion 加密专家都知道如何做到这一点?
更新
谢谢 Leigh,认为我们已经走得更远了,但仍然看到“无效的 stoken”。这是我所拥有的:
json_token = '{"session_id":"#createUUID()#","ts_ms":#dateDiff("s", dateConvert("utc2Local", "January 1 1970 00:00"), now())#}';
secret_key_hash = hash(secret_key,"SHA", "UTF-8");
secret_key_binary = binaryDecode(secret_key_hash, "hex");
secret_key_aes = arraySlice(secret_key_binary,1,16);
secret_key_base64 = binaryEncode( javacast("byte[]", secret_key_aes), "base64");
secure_token = Encrypt(json_token,secret_key_base64,"AES/ECB/PKCS5Padding",'base64');
我们在 Java 1.7 上使用 ColdFusion 9,arraySlice 方法不可用或底层 java .subList()。所以我们使用来自 cflib.org 的arraySlice UDF。
我还看到了关于 URL 编码的 PHP 实现的评论,所以我最后也尝试了这个,没有效果:
secure_token = Replace(secure_token,"=","","ALL");
secure_token = Replace(secure_token,"+","-","ALL");
secure_token = Replace(secure_token,"/","_","ALL");