M Q*_*inn 5 javascript google-chrome cryptojs microsoft-edge
我正在尝试设置一个客户端脚本,该脚本将对大小小于 2MB 的文件进行加密以上传到 SharePoint 文档库。对于包含个人身份信息 (PII)(例如社会安全号码等)的文件,加密是必需的。下面的代码在谷歌浏览器中完美运行,但在 MS Edge 中的 .encrypt(...) 部分失败。
Edge 将为 .encrypt(...) 函数创建所有需要的结果/缓冲区;但是,它返回“由于错误 8070000b 无法完成操作”。结果。我已经看到其他一些董事会谈论 Edge 并且需要在 .generateKey(...) 和 .encrypt(...) 脚本中包含“哈希”参数;但是,这对我的问题没有任何影响。
我错过了什么?
file = document.getElementsByName('aFile')[0].files[0]
function encrypt() {
window.crypto.subtle.generateKey(
{
name: "AES-GCM",
length:256,
},
true,
["encrypt", "decrypt"]
)
.then(function(key) {
pks = key
crypto.subtle.exportKey( "raw", key)
.then(function(buf) {
newKey = new Int8Array(buf)
exportedAsBase64 = _arrayBufferToBase64(buf);
})
.then(function() {
reader = new FileReader()
reader.readAsDataURL(file)
reader.onload = function() {
fileString = reader.result,
n=fileString.indexOf(";base64,") + 8;
X = _base64ToArrayBuffer(fileString.substring(n))
crypto.subtle.encrypt({name: 'AES-GCM', iv: newKey}, pks, X)
.then( function(buf) {
newFile = new Int8Array(buf)
encrypted = _arrayBufferToBase64(buf);
})
.catch(function (err) {
console.error(err);
});
}
})
})
}
function _base64ToArrayBuffer(base64) {
var binary_string = window.atob(base64);
var len = binary_string.length;
var bytes = new Uint8Array( len );
for (var i = 0; i < len; i++) {
bytes[i] = binary_string.charCodeAt(i);
}
return bytes.buffer;
}
Run Code Online (Sandbox Code Playgroud)