HMAC SHA1 ColdFusion

Chr*_*ris 5 coldfusion sha1 hmac

请帮忙!我一直把头发拉过来.:)

我有一个网站,我需要HMAC SHA1进行身份验证.它目前适用于另一种语言,但现在我需要将它移动到ColdFusion.对于我的生活,我无法得到匹配的字符串.任何援助将不胜感激.

数据:https%3A%2F%2Fwww%2Etestwebsite%2Ecom%3Fid%3D5447
关键: 265D5C01D1B4C8FA28DC55C113B4D21005BB2B348859F674977B24E0F37C81B05FAE85FB75EA9CF53ABB9A174C59D98C7A61E2985026D2AA70AE4452A6E3F2F9

正确答案:WJd%2BKxmFxGWdbw4xQJZXd3%2FHkFQ%3d
我的回答:knIVr6wIt6%2Fl7mBJPTTbwQoTIb8%3d

两者都是Base64编码,然后是URL编码.

小智 9

自己做一个HMAC-SHA1的事情.我能说的最好的是我找到了这个旧功能.迄今为止我的工作做得很好.忘了我发现它的地方,所以我不能相信作者.

对于你的Base 64东西...在你的加密上运行这个函数,然后在返回的内容上做一个cfset newString = toBase64(oldString).

<cffunction name="hmacEncrypt" returntype="binary" access="public" output="false">
   <cfargument name="signKey" type="string" required="true" />
   <cfargument name="signMessage" type="string" required="true" />
   <cfargument name="algorithm" type="string" default="HmacSHA1" />
   <cfargument name="charset" type="string" default="UTF-8" />

   <cfset var msgBytes = charsetDecode(arguments.signMessage, arguments.charset) />
   <cfset var keyBytes = charsetDecode(arguments.signKey, arguments.charset) />
   <cfset var keySpec = createObject("java","javax.crypto.spec.SecretKeySpec")  />
   <cfset var mac = createObject("java","javax.crypto.Mac") />

   <cfset key = keySpec.init(keyBytes, arguments.algorithm) />
   <cfset mac = mac.getInstance(arguments.algorithm) />
   <cfset mac.init(key) />
   <cfset mac.update(msgBytes) />

   <cfreturn mac.doFinal() />
</cffunction>
Run Code Online (Sandbox Code Playgroud)