适用于 Adob​​e AIR桌面的 AS3 HMAC SHA-256

问题描述

在 Actionscript 3 中,我需要使用密钥(字符串,utf-8)计算数据(字符串,utf-8)。

  1. 这是数据(字符串)“symbol=LTCBTC&side=BUY&type=LIMIT&timeInForce=GTC&quantity=1&price=0.1&recvWindow=5000&timestamp=1499827319559”

  2. 这是密钥(字符串)“NhqPtmdsJYdKjVHjA7PZj4Mge3R5YNiP1e3UZjInClVN65XAbvqqM6A7H5fATj0j”

  3. 这是它必须出来的结果(字符串)“c8db56825ae71d6d79447849e617115f4a920fa2acdcab2b053c4b2838bd6b71”

有人能解决这个问题吗? (结果是正确的,但我不知道得出结果的代码)。

这是我迄今为止尝试过的:

// THE DATA
var dataToEncode:String = "symbol=LTCBTC&side=BUY&type=LIMIT&timeInForce=GTC&quantity=1&price=0.1&recvWindow=5000&timestamp=1499827319559";
var byteArrayOfDataToEncode:ByteArray = new ByteArray();
byteArrayOfDataToEncode.writeUTF(dataToEncode); // we write the string into the ByteArray
                    
// THE SECRET KEY
var secretKey:String = "NhqPtmdsJYdKjVHjA7PZj4Mge3R5YNiP1e3UZjInClVN65XAbvqqM6A7H5fATj0j";
var byteArrayOfSecretKey:ByteArray = new ByteArray();
byteArrayOfSecretKey.writeUTF(secretKey); // we write the secret key into the ByteArray
                    
// WE COmpuTE THE SIGNATURE
var HMAC_SHA256:HMAC = new HMAC(new SHA256());
var byteArrayOfResultSignature:ByteArray = HMAC_SHA256.compute(byteArrayOfSecretKey,byteArrayOfDataToEncode);                  
var resultSignature:String = byteArrayOfResultSignature.readUTF();
                    
// WE SHOW THE RESULT SIGNATURE
trace("The result signature is: "+resultSignature);

这个 HMAC 类是使用这个库 (AS3Crypto) 创建的: https://github.com/Atmosphere/ActionScript/blob/master/src/com/hurlant/crypto/hash/HMAC.as

解决方法

感谢评论者,我找到了答案。

解决方案是 com.adobe.crypto 。

As3corelib 中有一个类(你可以在这里下载) https://code.google.com/archive/p/as3corelib/downloads)。您必须通过转到“文件-> Actionscript 设置”来导入这些文件夹,然后单击源路径,然后在那里添加“com”文件夹。

您还需要下载 Adob​​e Flex SDK(因为 As3corelib 中的某些类使用了 Flex SDK 中的某些实用程序类),将其解压缩,然后包含 framework.swc 文件(在 adobe flex 文件夹中搜索,在 frameworks/libs 文件夹中),转到“文件-> Actionscript 设置”,然后单击库路径,然后在那里添加 framework.swf。

现在你已经准备好了,就像这样:

import com.adobe.crypto.*; // import this,to have access to the classes we need.

// then this code where you need it
var message:String = "symbol=LTCBTC&side=BUY&type=LIMIT&timeInForce=GTC&quantity=1&price=0.1&recvWindow=5000&timestamp=1499827319559";
var secretKey:String = "NhqPtmdSJYdKjVHjA7PZj4Mge3R5YNiP1e3UZjInClVN65XAbvqqM6A7H5fATj0j";
                    
var signature:String = HMAC.hash(secretKey,message,SHA256) ;
                    
trace("The signature is: "+signature);

希望对您有所帮助,祝您有美好的一天!