【发布时间】:2021-05-17 20:02:24
【问题描述】:
在 Actionscript 3 中,我需要使用密钥(字符串,utf-8)计算数据(字符串,utf-8)。
-
这是数据(字符串)“symbol=LTCBTC&side=BUY&type=LIMIT&timeInForce=GTC&quantity=1&price=0.1&recvWindow=5000×tamp=1499827319559”
-
这是密钥(字符串)“NhqPtmdSJYdKjVHjA7PZj4Mge3R5YNiP1e3UZjInClVN65XAbvqqM6A7H5fATj0j”
-
这是它必须出来的结果(字符串)“c8db56825ae71d6d79447849e617115f4a920fa2acdcab2b053c4b2838bd6b71”
有人可以解决这个问题吗? (结果是正确的,但我不知道得到结果的代码)。
这是我迄今为止尝试过的:
// THE DATA
var dataToEncode:String = "symbol=LTCBTC&side=BUY&type=LIMIT&timeInForce=GTC&quantity=1&price=0.1&recvWindow=5000×tamp=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
【问题讨论】:
-
不幸的是,自从我在商业上使用 actionscript 已经有十年了。我建议您也发布您尝试的最小版本。希望其他可以解决潜在问题(例如整数类型溢出等)。我也会考虑替代库。这需要在浏览器中运行还是可以通过 Adobe Integrated Runtime (AIR) 执行? (如果是这样,可能值得检查原生扩展,例如 cryptopp-ane)
-
感谢乔治的评论。我如何使用cryptopp-ane?
-
适用于 AIR(桌面)。没有浏览器,一个独立的桌面应用程序。
-
如果您之前没有使用过 AIR,我建议您先做第一个简单的教程来掌握基础知识。接下来尝试加载/使用一个简单的 ANE 扩展。 (快速搜索我发现this tutorial:希望有更好的可用)。关于 cryptopp-ane,预编译的 .ane 文件位于
release文件夹中。此外,tester文件夹包含一个基本示例应用程序。如果您的系统上没有 Gradle,您仍然可以重新使用Main.as文件作为起点,而无需首选设置。 -
您正在将结果签名作为 UTF 字符串读取,而不是将其作为字节数组读取到十六进制字符串中,因此您会得到一些垃圾符号而不是十六进制数字序列。检查此stackoverflow.com/questions/24974043/… 以获得某种补救措施。
标签: actionscript-3 sha256 hmac