ColdFusion эквивалентен PHP hash_hmac

$key = "12345678876543211234567887654321"; $iv = "1234567887654321"; $plaindata = "This is a test string"; $enc = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $plaindata, MCRYPT_MODE_CBC, $iv)); $str = hash_hmac("sha256", utf8_encode($iv . '.' . $enc), utf8_encode($key)); echo($str); 

Это дает мне e63d4ab83f90cfec1acdaf831091b6394167ae728b657e44afad1e7553843eeb

Как я могу получить тот же результат в ColdFusion9 Development Edition?

Я нашел решение на этой странице http://www.isummation.com/blog/calculate-hmac-sha256-digest-using-user-defined-function-in-coldfusion/

Вам нужно вызвать функцию, подобную этой

 <cfoutput>#LCase(HMAC_SHA256(iv & "." & Encrypted_Data, key))#</cfoutput> 

Работал как шарм.

У вас нет времени полностью разобраться, но я думаю, что HMAC SHA1 ColdFusion должен быть в состоянии доставить вас туда. Если по какой-то причине вы не можете получить это совершенно правильно (это было когда-то), вы можете также рассмотреть возможность использования php-cli с cfexecute. Это не самое быстрое решение, но при необходимости оно позволяет использовать функции php.

Изменить: скопировал функцию из предыдущего ответа и добавила комментарий о строке, которую нужно было изменить.

 <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") /> <!--- this line had to be changed to the 256 version ---> <cfset key = key.init(jKey,"hmacSHA256") /> <cfset mac = mac.getInstance(key.getAlgorithm()) /> <cfset mac.init(key) /> <cfset mac.update(jMsg) /> <cfreturn mac.doFinal() />