3

SpeakEasy に似た JavaScript を使用してHOTPクライアントを作成したい

上記のライブラリは、サーバー側の JavaScript の使用を目的としており、NodeJS を使用します。

ブラウザのフロントエンド JavaScript で同じことをしたいのですが、CryptoJS を使用してこの動作を実現できませんでした。

         var key = "abc";
         var counter = "123";

         // create an octet array from the counter
         var octet_array = new Array(8);

         var counter_temp = counter;

         for (var i = 0; i < 8; i++) {
             var i_from_right = 7 - i;

             // mask 255 over number to get last 8
             octet_array[i_from_right] = counter_temp & 255;

             // shift 8 and get ready to loop over the next batch of 8
             counter_temp = counter_temp >> 8;
         }

        // There is no such class called as Buffer on Browsers (its node js)
         var counter_buffer = new Buffer(octet_array);

         var hash = CryptoJS.HmacSHA1(key,counter_buffer);

         document.write("hex value "+ hash);
         document.write("hash value "+    CryptoJS.enc.Hex.stringify(hash));

Java (android) や Objective C (ios) などのネイティブ プラットフォームでこれが可能であることはわかっています。Objective C での対応する HOTPの実装は次のとおりですが、Web ベースのフロント エンドで実行できるかどうかは疑問です。

また、JavaScriptはどのブラウザからでも表示できるため、ブラウザでそのようなことが安全かどうかは非常に疑問です。入力の提案は役に立ちます。私はPOCのためにこれをやっています。Web ベースのプラットフォームで Hotp を使用したことがある人がいるかどうか知りたいです。

4

2 に答える 2

3

コードでバイナリ データ文字列をサポートする言語はありません。バイナリ データを Hex や Base64 などの形式にエンコードし、CryptoJS でそれを独自の内部バイナリ形式にデコードして、さまざまな CryptoJS 関数に渡す必要があります。

var wordArrayFromUtf = CryptoJS.enc.Utf8.parse("test");
var wordArrayFromHex = CryptoJS.enc.Hex.parse("74657374"); // "test"
var wordArrayFromB64 = CryptoJS.enc.Base64.parse("dGVzdA=="); // "test"

その他の機能は次のとおりです。

wordArrayFromHex.toString(CryptoJS.enc.Utf8)  // "test"
CryptoJS.enc.Utf8.stringify(wordArrayFromB64) // "test"

文字列を CrypoJS 関数 (ここでは示しません) に渡すと、Utf8 でエンコードされた文字列と見なされます。それを望まない場合は、自分でデコードする必要があります。

于 2015-06-29T20:10:41.443 に答える
1

http://caligatio.github.io/jsSHA/のコードは、SHA-512.

.js ファイルをドロップし、test/test.html の 515 行を調べます。文字列のように見えるかもしれませんが、バイナリ 16 進数です。

したがって、彼らの入力は間違いのないバイナリです。大きなひもに座っているという事実にとらわれないでください。

于 2015-06-29T20:31:08.507 に答える