5

ColdFusion で HMAC-SHA256 ダイジェストを計算しようとしており、HMAC CFC を使用していますが、あるケースでは、異なる言語で生成されたダイジェストとは異なる結果を生成しています。Ruby と PHP を使用して同じデータを試しました。そして期待される結果を得る。ベースとなっているCF_HMACカスタムタグも試してみましたが、同じ結果が得られました。

CF8 から HMAC-SHA256 がサポートされていることは理解していencrypt()ますが、これは Enterprise でのみ利用でき (私たちにはありません)、開発者バージョンでテストすることさえできません。

だから私の質問は、CF から Java にアクセスすることでこれを行うことができますか?

4

2 に答える 2

11

これは私がやったことです:

secret = createObject('java', 'javax.crypto.spec.SecretKeySpec' ).Init(my_key.GetBytes(), 'HmacSHA256');
mac = createObject('java', "javax.crypto.Mac");
mac = mac.getInstance("HmacSHA256");
mac.init(secret);
digest = mac.doFinal(my_data.GetBytes());

これによりバイト配列が得られ、これを文字列に変換できます。

于 2009-06-04T16:51:40.280 に答える
0

これは、さまざまな入出力形式を使用した DEfusion の回答の例です。キーは 16 進数、データは下位の ascii (UTF-8 で十分) で、base64 出力が必要なので、適切な形式の引数を BinaryDecode と CharsetDecode に渡します。

<cfset keybytes = BinaryDecode(SECRET_KEY, "Hex")>
<cfset databytes = CharsetDecode(data, "UTF-8")>
<cfset secret = createObject("java", "javax.crypto.spec.SecretKeySpec").Init(keybytes,"HmacSHA256")>
<cfset mac = createObject("java", "javax.crypto.Mac")>
<cfset mac = mac.getInstance("HmacSHA256")>
<cfset mac.init(secret)>
<cfset digest = mac.doFinal(databytes)>
<cfset result = BinaryEncode(digest, "Base64")>
于 2013-09-25T01:00:53.290 に答える