【问题标题】:ColdFusion equivalent to PHP hash_hmacColdFusion 等价于 PHP hash_hmac
【发布时间】:2012-04-26 10:54:54
【问题描述】:
$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 开发版中获得相同的结果?

【问题讨论】:

标签: php coldfusion


【解决方案1】:

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

你需要这样调用函数

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

工作就像一个魅力。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    • 2022-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    • 2011-05-29
    相关资源
    最近更新 更多