Использую Vue. Чтобы заново не генерировать ключи при каждом обращении, достал ключ из локального хранилища, обозначил константой и пробую подставлять к this.originPublicKey значению, которое изначально пустое.
Но crypto-worker ругается Cannot read property 'setKey' of null. Если не подставлять значение, а позволить скрипту самому его получить, все работает. Подскажите, пожалуйста, как решить эту проблему?
const getPublicKeyCache = localStorage['public_key']
async created () {
this.cryptWorker = new Worker('crypto-worker.js')
$("#reload_status").html(lang['createConnection'])
// this.originPublicKey = await this.getWebWorkerResponse('generate-keys') генерация ключа с нуля
//Если ключ уже сгенерирован, достать из хранилища, дабы не генерировать снова
this.originPublicKey = getPublicKeyCache
this.socket = io()
this.setupSocketListeners()
}
Метод, который обращается к воркеру за ключами
getWebWorkerResponse (messageType, messagePayload) {
return new Promise((resolve, reject) => {
const messageId = Math.floor(Math.random() * 100000)
this.cryptWorker.postMessage([messageType, messageId].concat(messagePayload))
const handler = function (e) {
if (e.data[0] === messageId) {
e.currentTarget.removeEventListener(e.type, handler)
resolve(e.data[1])
}
}
this.cryptWorker.addEventListener('message', handler)
})
},
Код crypto-worker.js
self.window = self
self.importScripts('jsencrypt.min.js');
let crypt = null
let privateKey = null
onmessage = function(e) {
const [ messageType, messageId, text, key ] = e.data
let result
switch (messageType) {
case 'generate-keys':
result = generateKeypair()
break
case 'encrypt':
result = encrypt(text, key)
break
case 'decrypt':
result = decrypt(text)
break
}
// Return result to the UI thread
postMessage([ messageId, result ])
}
/** Generate and store keypair */
function generateKeypair () {
crypt = new JSEncrypt({default_key_size: 2056})
privateKey = crypt.getPrivateKey()
// Only return the public key, keep the private key hidden
return crypt.getPublicKey()
}
/** Encrypt the provided string with the destination public key */
function encrypt (content, publicKey) {
crypt.setKey(publicKey)
return crypt.encrypt(content)
}
/** Decrypt the provided string with the local private key */
function decrypt (content) {
crypt.setKey(privateKey)
return crypt.decrypt(content)
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Решаю задание и вот возникла проблема з написанием функцииВсе методы прописал, а вот как задейсвовать их не знаю
Я решил сделать перебор статей используя vueВ общем суть такова, у меня не работало dropdown bootstrap в самом vue, и я скачал дополнения (vue-js-dropdown)
Использую ReactJS, пишу на ECMASсript 7 и использую транслятор BabelJS