Я пытаюсь настроить клиентский сценарий, который будет шифровать файлы размером менее 2 МБ для загрузки в библиотеку документов SharePoint.Шифрование необходимо для файлов, которые содержат персонально идентифицируемую информацию (PII), такую как номера социального страхования и тому подобное.Приведенный ниже код отлично работает в Google Chrome, но не работает с частью .encrypt (...) в MS Edge.
Edge создаст все необходимые результаты / буферы для функции .encrypt (...);однако он возвращает «Не удалось завершить операцию из-за ошибки 8070000b».результат.Я видел, как на некоторых других форумах говорилось об Edge и необходимости включать параметр "hash" в оба скрипта .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;
}