繁体   English   中英

ColdFusion相当于PHP hash_hmac

[英]ColdFusion equivalent to 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开发版中获得相同的结果?

我在这个网页上找到了一个解决方案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() />

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM