Coldfusion HMAC-SHA1 шифрование - PullRequest
       23

Coldfusion HMAC-SHA1 шифрование

4 голосов
/ 08 февраля 2012

Здесь приведен пример HMAC-SHA1, который работает в javascript

http://jssha.sourceforge.net/

Текст для шифрования

vibaHBXwUXFqVSg- + kTrqYJZEJkbVeqLc = bo.LlXGET12505351831husu9039 http://api.tineye.com/rest/search/image_url=http%3a%2f%2ftineye.com%2fimages%2ftineye_logo_big.png&limit=30&offset=10

Key

vibaHBXwUXFqVSg- + kTrqYJZEJkbVeqLc = bo.LlX

выход

9e734661c9e8b6dc9b6b4b3def9769c00e8843b8

Выпуск

Однако я не могу продублировать вывод в Coldfusion. Я использую функцию из предыдущего вопроса 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))>

Возвращает

nnNGYcnottyba0s975dpwA6IQ7g =

Любая помощь приветствуется.

Ответы [ 2 ]

6 голосов
/ 08 февраля 2012
<cfset x1 = toString(tobase64(result))>

Другая функция возвращает hex, а не base64. Кроме этого, мне кажется, что он отлично работает:

 <cfset x1 = binaryEncode(result, "hex")>
3 голосов
/ 08 февраля 2012

Подсказка находится в ожидаемой выходной строке: она содержит только цифры и строчные буквы. Если вы посмотрите ближе, все буквы находятся в диапазоне a-f. Поэтому весьма вероятно, что это шестнадцатеричная строка.

Последняя строка вашего примера кода кодирует результат как base64, а не шестнадцатеричный. Вы можете закодировать результат как шестнадцатеричный, изменив последнюю строку на это:

<cfset x1 = binaryEncode(result,"hex")>

Я запустил измененный код и получил

9E734661C9E8B6DC9B6B4B3DEF9769C00E8843B8

, которая является заглавной версией ожидаемой строки.

...