【发布时间】:2015-09-16 09:40:25
【问题描述】:
我想使用类似于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) 这样的原生平台上是可能的 这是相应的实现HOTP in Objective C,但我怀疑是否可以在基于 Web 的前端进行。
此外,我非常怀疑这样的事情在浏览器中是否安全,因为可以从任何浏览器查看 javascript。任何输入建议都会很有用。我这样做是为了 POC。我很好奇是否有人在基于 Web 的平台上使用过 Hotp。
【问题讨论】:
-
你想要哪个哈希
-
@DrewPierce 理想情况下我想使用 sha512
-
@DrewPierce 我用过。但是,这些函数的输入是字符串。我对哈希函数的输入不是字符串,而是二进制数据。所以结果不等价。
-
@DanielAranda 我的问题与此不同。我想知道在基于 Web 的前端上使用 hotp 是否可行。
标签: javascript hash sha cryptojs one-time-password