Расшифровать зашифрованное изображение AES в браузере с помощью window.crypto.subtle.decrypt

#openssl #aes #encryption-symmetric #subtlecrypto

#openssl #aes #шифрование-симметричное #subtlecrypto

Вопрос:

Бизнес-пример использования:

В моем приложении я разрешаю пользователям загружать изображения. Теперь, прежде чем сохранять его в файловой системе, я хочу, чтобы изображения были зашифрованы aes. Для отображения изображений в браузере я хочу расшифровывать их «на лету» в браузере. Таким образом, в основном они будут зашифрованы в состоянии покоя и будут расшифрованы во время воспроизведения.

Что я реализовал:

Я зашифровал изображение, используя открытый ssl и алгоритм AES 265 CBC. Ниже приведена команда, которую я использовал

 openssl enc -in ima&e-ori&inal.jp& -out ima&e-enc.jp& -e -aes256 -k 26ca44bbeb4b6608437737970cbfe0db
  

Во внешнем интерфейсе я отправляю HTTP-вызов серверу для чтения зашифрованного изображения как
большой двоичный объект, и я пытаюсь расшифровать этот большой двоичный объект с помощью
функция window.crypto.subtle.decrypt. Ниже приведен код

 window.crypto.subtle.decrypt(
        {
            name: "AES-CBC",
            len&th: 256
        },
        "26ca44bbeb4b6608437737970cbfe0db",
        "blob that we fetched from server"
    ).then((result) =&&t; {
        debu&&er;
    });
  

Но я получаю ошибку, указанную ниже, в консоли браузера

 "TypeError: Failed to execute 'decrypt' on 'SubtleCrypto': parameter 2 is not of type 'CryptoKey'."
  

Вопросы:

У меня к вам, ребята, 2 вопроса,

  1. Помогите мне устранить эту ошибку, поскольку я не нахожу большой помощи через Интернет
  2. Предложите мне лучший подход или поделитесь своим опытом, если вы выполняли подобную работу в прошлом.

Комментарии:

1. -k Параметр в OpenSSL определяет кодовую фразу, из которой получены key и IV, смотрите здесь , а также обратите внимание на опции -p / -P . Вы можете использовать кодовую фразу не в веб-криптокоде, а вместо нее key и IV. OpenSSL также позволяет вам напрямую указывать ключ и IV, возможно, это имеет больше смысла для вас. Ключ, используемый в веб-криптокоде, обычно является CryptoKey объектом, в который импортируется необработанный ключ, смотрите здесь .

2. @Topaco Ваш ответ очень помог мне в решении этой проблемы. Скоро я опубликую здесь свое полное решение.

3. @AsadUllah, ты выяснил, как это исправить?

4. @AifosSiPrahs Вместо передачи необработанного ключа в window.crypto.subtle.decrypt мне пришлось передать объект CryptoKey, в который был импортирован необработанный ключ.

Ответ №1:

Вместо передачи необработанного ключа мне пришлось передать объект CryptoKey, в который был импортирован необработанный ключ.