使用 OpenPGP.JS 实现了在浏览器中加密文件并且下载
main.js1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| const downloadBlob = (data, fileName, mimeType) => { let blob, url; blob = new Blob([data], { type: mimeType }); url = window.URL.createObjectURL(blob); downloadURL(url, fileName); setTimeout(function() { return window.URL.revokeObjectURL(url); }, 1000); };
const downloadURL = (data, fileName) => { let a; a = document.createElement('a'); a.href = data; a.download = fileName; document.body.appendChild(a); a.style = 'display: none'; a.click(); a.remove(); };
document.getElementById('file').onchange = (e) => { const key = `-----BEGIN PGP PUBLIC KEY BLOCK-----
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 QrMVlvN/M1x2KYGBnSnyjivh35/eL0R8Irau =pm+Y -----END PGP PUBLIC KEY BLOCK----- `; const file = new Blob([e.currentTarget.files[0]], { type: 'application/octet-stream' }) const fileName = e.currentTarget.files[0].name; const fileReader = new FileReader(); fileReader.readAsArrayBuffer(file, 'UTF-8'); fileReader.onload = async (data) => { const arrayFile = new Uint8Array(data.target.result); const encrypt = await openpgp.encrypt({ message: openpgp.message.fromBinary(arrayFile), publicKeys: (await openpgp.key.readArmored(key)).keys, armor: false }); const encrypted = encrypt.message.packets.write(); downloadBlob(encrypted, `${fileName}.gpg`, 'application/octet-stream') } }
|
上面两个用于下载二进制文件的函数是从 StackOverFlow 扒过来的