encryption - Cifrado Coldfusion HMAC-SHA1
coldfusion-9 hmacsha1 (2)
<cfset x1 = toString(tobase64(result))>
La otra función es devolver hex, no base64. Aparte de eso, parece funcionar bien para mí:
<cfset x1 = binaryEncode(result, "hex")>
Aquí hay un ejemplo de HMAC-SHA1 que funciona en javascript
Texto para encriptar
vibaHBXwUXFqVSg- + kTrqYJZEJkbVeqLc = bo.LlXGET12505351831husu9039http: //api.tineye.com/rest/search/image_url=http%3a%2f%2ftineye.com%2fimages%2ftineye_logo_big.png&limit=30&offset=10
Llave
vibaHBXwUXFqVSg- + kTrqYJZEJkbVeqLc = bo.LlX
Salida
9e734661c9e8b6dc9b6b4b3def9769c00e8843b8
Problema
No obstante, no puedo duplicar la salida en Coldfusion. Estoy usando una función de una pregunta previa de Stackoverflow.com
<cffunction name="hmacEncrypt" returntype="binary" access="public" output="false">
<cfargument name="signKey" type="string" required="true" />
<cfargument name="signMessage" type="string" required="true" />
<cfset var jMsg = JavaCast("string",arguments.signMessage).getBytes("iso-8859-1") />
<cfset var jKey = JavaCast("string",arguments.signKey).getBytes("iso-8859-1") />
<cfset var key = createObject("java","javax.crypto.spec.SecretKeySpec") />
<cfset var mac = createObject("java","javax.crypto.Mac") />
<cfset key = key.init(jKey,"HmacSHA1") />
<cfset mac = mac.getInstance(key.getAlgorithm()) />
<cfset mac.init(key) />
<cfset mac.update(jMsg) />
<cfreturn mac.doFinal() />
</cffunction>
<cfset result = hmacEncrypt("vibaHBXwUXFqVSg-+kTrqYJZEJkbVeqLc=bo.LlX", "vibaHBXwUXFqVSg-+kTrqYJZEJkbVeqLc=bo.LlXGET12505351831husu9039http://api.tineye.com/rest/search/image_url=http%3a%2f%2ftineye.com%2fimages%2ftineye_logo_big.png&limit=30&offset=10")>
<cfset x1 = toString(tobase64(result))>
Esto regresa
nnNGYcnottyba0s975dpwA6IQ7g =
Cualquier ayuda apreciada.
La clave está en la cadena de salida esperada: contiene solo dígitos y letras minúsculas. Si miras más de cerca, todas las letras están en el rango af. Por lo tanto, es muy probable que sea una cadena hexadecimal.
La última línea de su código de ejemplo codifica el resultado como base64, no hexadecimal. Puede codificar el resultado como hexadecimal cambiando la última línea a esto:
<cfset x1 = binaryEncode(result,"hex")>
Ejecuté el código modificado y obtuve
9E734661C9E8B6DC9B6B4B3DEF9769C00E8843B8
que es la versión en mayúsculas de tu cadena esperada.