javascript - Is binary hashing possible with CryptoJS? - Stack Overflow

I want to create an HOTP client using javascript similar to SpeakEasyThe above library is intended for

I want to create an HOTP client using javascript similar to SpeakEasy

The above library is intended for server side javascript usage and it uses NodeJS.

I want to do the same thing on front end javascript in a browser but I haven't been able to use CryptoJS to achieve this behavior.

         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));

I know this is possible on a native platform like java (android) or objective c (ios) Here is the corresponding implementation HOTP in Objective C but I doubt if it's possible to do on a web based front end.

Also, I highly doubt if such a thing is secure in browser because javascript is viewable from any browser. Any inputs suggestions would be useful. I am doing this for a POC. I am curious if anyone has used Hotp on web based platform.

I want to create an HOTP client using javascript similar to SpeakEasy

The above library is intended for server side javascript usage and it uses NodeJS.

I want to do the same thing on front end javascript in a browser but I haven't been able to use CryptoJS to achieve this behavior.

         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));

I know this is possible on a native platform like java (android) or objective c (ios) Here is the corresponding implementation HOTP in Objective C but I doubt if it's possible to do on a web based front end.

Also, I highly doubt if such a thing is secure in browser because javascript is viewable from any browser. Any inputs suggestions would be useful. I am doing this for a POC. I am curious if anyone has used Hotp on web based platform.

Share Improve this question edited Jun 30, 2015 at 6:47 Artjom B. 62k26 gold badges135 silver badges230 bronze badges asked Jun 29, 2015 at 19:26 Kunal BalaniKunal Balani 4,7894 gold badges38 silver badges74 bronze badges 5
  • Which hash do you want – Drew Commented Jun 29, 2015 at 19:32
  • @DrewPierce Ideally I would like to use sha512 – Kunal Balani Commented Jun 29, 2015 at 19:33
  • caligatio.github.io/jsSHA – Drew Commented Jun 29, 2015 at 19:35
  • @DrewPierce I have used it. However, the input to those functions are string. My input to hash function is not a string but binary data. So the results are not equivalent. – Kunal Balani Commented Jun 29, 2015 at 19:37
  • @DanielAranda my question is different than this. I want to know if doing this is feasible in terms of having hotp on a web based front end. – Kunal Balani Commented Jun 29, 2015 at 19:47
Add a ment  | 

2 Answers 2

Reset to default 3

There is no such language that supports binary data strings in the code. You need to encode the binary data into some format such as Hex or Base64 and let CryptoJS decode it into it's own internal binary format which you then can pass to the various CryptoJS functions:

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

Other functions are:

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

If you pass a string into a CrypoJS function (not these here), it will be assumed to be a Utf8-encoded string. If you don't want that, you need to decode it yourself.

The code at http://caligatio.github.io/jsSHA/ works fine for SHA-512.

Drop the .js files, look in their test/test.html at line 515. It might look like a string to you but it is binary hex.

So their input is binary which is unmistaken. Don't get hung up on the fact it is sitting in a big string.

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745414807a4626698.html

相关推荐

  • javascript - Is binary hashing possible with CryptoJS? - Stack Overflow

    I want to create an HOTP client using javascript similar to SpeakEasyThe above library is intended for

    3小时前
    30

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信