encryption coldfusion coldfusion-9 hmacsha1

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

http://jssha.sourceforge.net/

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.