Вернуть ключ hmac в javascript

От моего поставщика api у меня есть код, который предназначен для создания ключа hmac.

<html>
<head>
</head>
<body>
<p id = "demo"></p>
<script>var BuckarooHmac = (function () {
    var self = {};

    function getEncodedContent(content) {
        if (content) {
            var md5 = CryptoJS.MD5(content);
            var base64 = CryptoJS.enc.Base64.stringify(md5);
            return base64;
        }

        return content;
    }

    function getHash(websiteKey, secretKey, httpMethod, nonce, timeStamp, requestUri, content) {
        var encodedContent = getEncodedContent(content);

        var rawData = websiteKey + httpMethod + requestUri + timeStamp + nonce + encodedContent;
        var hash = CryptoJS.HmacSHA256(rawData, secretKey);
        var hashInBase64 = CryptoJS.enc.Base64.stringify(hash);

        return hashInBase64;
    }

    function getTimeStamp() {
        return Math.floor((new Date).getTime() / 1000);
    }

    function getNonce() {
        var text = "";
        var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
        for (var i = 0; i < 16; i++) {
            text += possible.charAt(Math.floor(Math.random() * possible.length));
        }
        return text;
    }

    self.GetAuthHeader = function (requestUri, websiteKey, secretKey, content, httpMethod) {
        var nonce = getNonce();
        var timeStamp = getTimeStamp();
        content = content ? content : "";
        var url = encodeURIComponent(requestUri).toLowerCase();
        return "hmac " + websiteKey + ":" + getHash(websiteKey, secretKey, httpMethod, nonce, timeStamp, url, content) + ":" + nonce + ":" + timeStamp;
    }
    return self;
     document.getElementById("demo").innerHTML = self.GetAuthHeader();
}());

</script>
</body>
</html>

Я не привык к javascript. Я пытаюсь понять, как распечатать сгенерированный ключ на моем экране. Я пробовал это:

document.getElementById("demo").innerHTML = self.GetAuthHeader();

Я знаю, что, должно быть, делаю это неправильно. Мне просто нужен толчок в правильном направлении. Кто-нибудь, кто мог бы мне помочь?

Есть ли причина, по которой вы не используете встроенный crypto.subtle в браузерах? Это довольно просто, чтобы получить hmac, если вы уже знаете базовые концепции.

Benjamin Gruenbaum 22.06.2018 11:32

Где вы пробуете эту строчку кода? Если он находится за пределами этой закрытой области видимости функции, значит, переменная self отсутствует, но есть BuckarooHmac.GetAuthHeader().

David 22.06.2018 11:34

@BenjaminGruenbaum Я не набирал этот код. Он уже создан. Я просто пытаюсь показать результаты.

Kevin 22.06.2018 11:54

@David есть собственная переменная. И я пробую эту строку кода прямо под return self;

Kevin 22.06.2018 11:59

@Kevin: Вместо того, чтобы просто описывать то, что вы пробовали, продемонстрируйте это в коде вопроса.

David 22.06.2018 12:22

@ Дэвид, я добавил то, что пытался, в основной код

Kevin 22.06.2018 12:26
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
122
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы пытаетесь выполнить действие после в инструкции return функции. Этот код никогда не будет достигнут, потому что функция вернулась.

Вместо этого сделайте это раньше:

document.getElementById("demo").innerHTML = self.GetAuthHeader();
return self;

Или, что еще лучше, если этот код предоставляется поставщиком, вам, вероятно, не следует его редактировать. Обновления удалят ваши правки, и поддержка поставщика будет скомпрометирована. Вместо этого полностью выполняйте свое действие вне кода:

var BuckarooHmac = (function () {
    // vendor code
}());

document.getElementById("demo").innerHTML = BuckarooHmac.GetAuthHeader();

Другие вопросы по теме