3
$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 开发版中获得相同的结果?

4

2 回答 2

2

我在这个页面上找到了一个解决方案http://www.isummation.com/blog/calculate-hmac-sha256-digest-using-user-defined-function-in-coldfusion/

您需要像这样调用函数

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

像魅力一样工作。

于 2012-05-09T13:05:06.583 回答
0

没有时间完全解决它,但我认为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() />

于 2012-04-26T12:11:43.937 回答