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 Development Edition で同じ結果を得るにはどうすればよいですか?

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を使えば解決できるはずです。なんらかの理由で完全に正しく取得できない場合 (以前はそうでした)、cfexecute で php-cli を使用することも検討してください。これは最速のソリューションではありませんが、必要に応じて 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 に答える