Я хочу создать HOTP-клиент с помощью javascript, аналогичного SpeakEasy.
Вышеупомянутая библиотека предназначена для использования 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) или target c (ios). Вот соответствующая реализация HOTP в Objective C, но я сомневаюсь, что это возможно сделать в веб-интерфейсе.
Кроме того, я очень сомневаюсь, что такая вещь безопасна в браузере, потому что javascript можно просматривать в любом браузере. Любые предложения входов были бы полезны. Я делаю это для POC. Мне любопытно, использовал ли кто-нибудь Hotp на веб-платформе.