-1

Всем привет, решил создать простую фунцию для конвертации строки в SHA-256

function Hash(message) {
    const text_encoder = new TextEncoder();
    const data = text_encoder.encode(message);
    const message_digest =  crypto.subtle.digest("SHA-256", data);
    console.log(message_digest);
    const octets = new Uint8Array(message_digest);
    const  hex = [].map.call(octets, octet =>      octet.toString(16).padStart(2, "0")).join("");
    return  hex;
  }
hash=Hash("test");

И в итоге утыкнулся в промис crypto.subtle.digest();

Функция возвращает пустой результат. Как мне получить вместо промеса захешированную строку?

Art
  • 103
  • 4
  • @Grundy зачем вы закрыли мой вопрос? Во всех ваших примерах фигурирует console.log(), а не переменная. В итоге я не получил ответа на свой вопрос, не в этом топике, не в прикремпленном. Если я хотел получить информацию в console.log(); Я бы просто сделал это внутри функции. – Art Apr 14 '20 at 10:53
  • самый первый пример в ответе как раз демонстрирует получение в переменную. – Grundy Apr 14 '20 at 10:56
  • в области функции. Если предположим мне нужно создать глобальную переменную для авторизации через токен. Мне весь код взаимодействия писать внутри функции? Я предпологал использовать это как метод. – Art Apr 14 '20 at 11:05
  • Мне весь код взаимодействия писать внутри функции? - да, пока это работает только внутри функции с async. Других способов нет. – Grundy Apr 14 '20 at 11:09
  • Вы убедили меня в неэффективности этого метода. спасибо – Art Apr 14 '20 at 11:18
  • Это единственный эффективный метод. – Grundy Apr 19 '20 at 19:02

1 Answers1

0

async function Hash(message) {
    const text_encoder = new TextEncoder();
    const data = text_encoder.encode(message);
    const message_digest = await crypto.subtle.digest("SHA-256", data);
    const octets = new Uint8Array(message_digest);
    const  hex = [].map.call(octets, octet =>      octet.toString(16).padStart(2, "0")).join("");
    return  hex;
  }
const hash = Hash("test");
hash.then(console.log);
  • Спасибо за ответ, я пытался сделать асинхронную фунцию. Но задача не стоит для того что бы вывести хеш в консоль. Очень много таких примеров было.

    В переменной hash я планирую не промес, а именно строку с хешем

    – Art Apr 14 '20 at 10:36
  • Пока этот промис не выполнится, вы не можете получить результат из функции. Так что вам надо обрабатывать это поведение асинхронно. – Денис Степанов Apr 14 '20 at 10:52