2

as3 の as3crypto を使用して、文字列 '12345' から SHA1 ハッシュを、次の例と同じ方法で作成します。

var sha1:SHA1 = new SHA1;
var src:ByteArray = Hex.toArray("12345");
var digest:ByteArray = sha1.hash(src);
trace('SHA:' + Hex.fromArray(digest));

結果: ec60c0fd70d82a7785f6c9a02dbe16f2e40b1344

PHP で同じ文字列から SHA1 を作成します。

print "SHA:".sha1("12345");

結果: 8cb2237d0679ca88db6464eac60da96345513964

他のツールでハッシュを取得しようとすると、2 番目の結果が得られるので、PHP からの結果が正しいように見えます。

質問: as3crypto で同じハッシュを取得するにはどうすればよいですか?

ところで: テスト中に、as3crypto を使用した別の方法で別の (間違った?) 結果が得られることがわかりました。

var src:ByteArray = new ByteArray();
src.writeUTF("12345");
var digest:ByteArray = sha1.hash(src);
trace('SHA:' + Hex.fromArray(digest));

結果: b98cfbc53daec4029895585ab198f7403d0d0506

4

4 に答える 4

2

12345 の 16 進数 (Hex.toArray で変換している) の値は、文字列 "12345" と同じではありません。

10 進数16 進数のバイト配列に変換してハッシュし、それをPHP で生成された文字列のハッシュと比較しています。これらは決して一致しません。

どうしても 2 つの 16 進数を比較する必要がある場合は、このように PHP を変更するとうまくいくはずです。

「SHA:」を出力します。sha1(dehex(12345));

詳細については、dehex PHP ドキュメントを参照してください。

于 2011-02-17T16:38:37.757 に答える
2

as3crypto lib を使用して php sha1 を一致させる正しい方法は、次のとおりです。

var src:ByteArray = Hex.toArray(Hex.fromString(srcString));
var sha1:SHA1 = new SHA1();
var hashedString:String = Hex.fromArray(sha1.hash( src ));

最初の追加の Hex.fromString は、他の人が言及したように、10 進変換を回避します。

注: as3corelib バージョンははるかに単純です: as3corelib SHA1

var hashedString:String = SHA1.hash( srcString );
于 2012-04-14T23:18:47.660 に答える
1
var sha1:SHA1 = new SHA1(); 
var src:ByteArray = new ByteArray(); 
src.writeUTFBytes("12345"); 
trace( Hex.fromArray( sha1.hash( src ) ) );

を使用してwriteUTFBytes、このメソッドは文字列を BOM なしで bytesarray オブジェクトに書き込みます。

于 2016-08-04T05:08:03.770 に答える
1

PHP出力は間違いなく正しいです。MySQLのsha1関数に対してテストしました:

mysql> select sha1('12345');
+------------------------------------------+
| sha1('12345')                            |
+------------------------------------------+
| 8cb2237d0679ca88db6464eac60da96345513964 |
+------------------------------------------+

可能性のある原因はこれです-この行の入力データで使用Hex.toArray()しています:

var src:ByteArray = Hex.toArray("12345");

元の文字列をバイト配列にする必要がある場合。ただし、AS3 がわからないので、2 回目の試行も失敗した理由を答えることはできません。

于 2011-02-17T16:25:27.743 に答える