我想从工人那里调用SubtleCrypto的方法。通常,可以通过窗口上下文中可用的Crypto.subtle属性:
例:window.crypto.subtle.encrypt()
在工作人员中,窗口不可用,但仍然可以通过以下方式访问密码:
self.crypto但是,self.crypto.subtle总是返回未定义的。这是正常行为(例如:出于安全目的禁用)还是有可能从工作人员调用SubtleCrypto方法?
我创建了一个JSFiddle,用于复制行为这里。我用铬。
发布于 2019-01-21 21:13:14
crypto.subtle现在需要一个安全的源。 自Chrome 37以来一直支持的Web Crypto API一直致力于非安全来源的工作。由于Chrome长期奉行的在强大的特性中更喜欢安全的来源政策,
crypto.subtle现在只在安全来源上可见。 意图移除 x- 铬虫
当放置在HTTPS服务器上时,下面的代码具有crypto.subtle,工作正常
<!DOCTYPE html>
<html>
<body>
<input id="start" type="button" value="Start">
<script>
function getWorkerJS() {
var js = `
onmessage = function(e) {
var jwkKey = {
kty: "oct",
k: "lckjnFLIEas7yf65ca6saksjhcajs554s5cajshgGGG"
};
crypto.subtle.importKey(
"jwk", jwkKey, {name: "AES-CBC"}, true,
['encrypt', 'decrypt', 'wrapKey', 'unwrapKey']
)
.then(
function (result) {
postMessage({ success: true});
},
function (error) {
postMessage({ message: error.message });
}
);
};
`;
var blob = new Blob([js], {"type": "text/plain"});
return URL.createObjectURL(blob);
}
var ww = new Worker(getWorkerJS());
ww.onmessage = function(msg) {
console.log(msg.data);
};
document.getElementById('start').addEventListener('click', start, false);
function start() {
ww.postMessage('start');
}
</script>
</body>
</html>https://stackoverflow.com/questions/54295177
复制相似问题