【发布时间】:2017-10-06 15:28:33
【问题描述】:
这些工作:
crypto.subtle.digest('SHA-512', new Uint8Array([0]))
crypto.subtle.digest('SHA-512', new Uint8Array([0]).buffer)
这些不:
crypto.subtle.digest('SHA-512', new Proxy(new Uint8Array([0]),{}))
crypto.subtle.digest('SHA-512', new Proxy(new Uint8Array([0]).buffer,{})
错误:
Failed to execute 'digest' on 'SubtleCrypto': The provided value is not of type '(ArrayBuffer or ArrayBufferView)'
instanceof Uint8Array 和 instanceof ArrayBuffer 在这两种情况下都返回 true。
【问题讨论】:
-
看起来原生
crypto.subtle.digest函数需要一个真正的类型化数组,而不是代理。即使它们在其他方面与 javascript 无法区分。 -
你想做什么,为什么要在这里使用代理?
-
@Bergi,我想通过劫持它使用的任何访问方法来将文件分片传递给它。加载 1.2GB 或更大的 ArrayBuffer 会使选项卡崩溃。
-
您可以在不使用代理的情况下完美地对文件(Blob 或 ArrayBuffer)进行切片?虽然我不确定你打算如何使用代理来降低内存使用量。
-
原生加密不支持
.update(data)进行散列。你给它一个ArrayBuffer,它会返回一个ArrayBuffer的哈希值的承诺。故事结束。
标签: javascript arraybuffer webcrypto-api es6-proxy