0
message = "this is the message";
key = "the_key";
timestamp = "20130121";
this_id = "13291";

key = Base64.decodeToByteArray(key);
message = this_id + "-" + timestamp;
hmac = Crypto.getHMAC("sha1");
message = Hex.fromArray(hmac.compute(key, Hex.toArray(Hex.fromString(message)))) + "-" + message;
data = Hex.toArray(Hex.fromString(message));
gen_token = Base64.encodeByteArray(data);

ASについてはわかりませんが、上記のAS関数をPHPに変換する必要があります。「decodeToByteArray」および「encodeByteArray」に似たphpの同様の関数はありますか? 私は次のことしかできません。

key = base64_decode(key);
$message = $this_id ."-".$timestamp;
$message = hash_hmac ('sha1', $key , $message) . $message;
$gen_token = base64_encode(key);
4

2 に答える 2

1
string **base64_encode** ( string *$data* )

http://php.net/manual/en/function.base64-encode.php

string **base64_decode** ( string *$data* [, bool *$strict = false* ] )

http://php.net/manual/en/function.base64-decode.php

ByteArray (8 ビット エンティティの配列) は、実際には文字列です。

したがって、base64_encodebase64_decodeは必要なことをすべて行います。

于 2013-01-21T08:43:06.090 に答える
0

次のように、一部のコードは意味がありません。

message = this_id + "-" + timestamp;

それは の値を上書きします"this is the message"

また、ID とタイムスタンプだけでキー付きハッシュを生成するように見えるため、メッセージの内容が不要な変更に対して脆弱になります。this_idより理にかなっているのは、 、 、timestamp および のキー付きハッシュを計算することですmessage

$key = base64_decode('value of key expressed in base64 string');
// calculate signature for remote validation
$sig = hmac_hash('sha1', "$this_id-$timestamp-$message", $key);

$gen_token = base64_encode("$sig-$message");
于 2013-01-21T08:59:11.903 に答える