Tôi muốn tạo ghi chú an toàn qua javascript và webcrypto.
Tôi đã tìm thấy các khả năng tạo khóa mạnh thông qua PBKDF2
và mã hóa dữ liệu qua AES
.
Đây là một ví dụ về cách tạo khóa thông qua PBKDF2 trong webcrypto, nơi cần có muối:
hàm getKey(keyMaterial, salt) {
trả về window.crypto.subtle.deriveKey(
{
"tên": "PBKDF2",
muối: muối,
"lặp lại": 100000,
"băm": "SHA-256"
},
vật liệu chính,
{ "name": "AES-GCM", "length": 256},
thật,
[ "giải mã mã hóa" ]
);
}
https://github.com/mdn/dom-examples/blob/master/web-crypto/derive-key/pbkdf2.js#L37-L50
Khóa này được sử dụng để mã hóa dữ liệu:
để keyMaterial = đang chờ getKeyMaterial();
muối = window.crypto.getRandomValues(new Uint8Array(16));
để chìa khóa = đang chờ getKey(keyMaterial, salt);
iv = window.crypto.getRandomValues(new Uint8Array(12));
để mã hóa = getMessageEncoding();
ciphertext = đang chờ window.crypto.subtle.encrypt(
{
tên: "AES-GCM",
iv: iv
},
Chìa khóa,
được mã hóa
);
Tôi sẽ cần thông tin này để giải mã trong tương lai. Tôi muốn xuất dữ liệu này từ trình duyệt và giải mã dữ liệu này sau bằng mật khẩu được cung cấp.
Tôi muốn có định dạng JSON sau:
dữ liệu: {
ghi chú: [
{
được mã hóaLưu ý: '..',
thứ năm: '..',
}
]
Muối: '..'
}
Bây giờ tôi không chắc làm thế nào để lưu trữ véc tơ khởi tạo và muối an toàn? Có thể lưu trữ dữ liệu như trên không?