Я успешно реализовал метод шифрования AES Роба Напьера для iOS в одном из моих приложений. Теперь я хотел бы иметь возможность шифровать и расшифровывать файлы из этого приложения с помощью моей реализации JavaScript. Я использую FileReader, чтобы получить локальный файл от пользователя и загрузить его с помощью
reader.readAsArrayBuffer(file);
Когда это будет сделано, файл будет зашифрован с помощью Стэнфордской криптобиблиотеки JavaScript, и, наконец, зашифрованный файл можно будет загрузить:
reader.onloadend = function(e) {
var content = new Uint8Array(e.target.result);
var utf8 = "";
for (var i = 0, len = content.length; i < len; i++) {
utf8 += String.fromCharCode(content[i]);
}
var b64 = btoa(utf8);
//we finally encrypt it
var encrypted = sjcl.encrypt(password, b64,{ks:256});
var json = JSON.parse(encrypted);
var ciphertext = json.ct;
a.attr('href', 'data:application/octet-stream,' + ciphertext);
a.attr('download', file.name + '.encrypted');
step(4);
};
reader.readAsArrayBuffer(file);
Проблема в том, что зашифрованный файл намного больше оригинала. Это не относится к моей реализации для iOS, которая работает нормально. И, конечно же, его невозможно расшифровать без ошибок. Фактически результирующий файл будет иметь размер 0 байт.
Я надеюсь, что кто-то может указать мне на ошибку в моем коде. Это было бы действительно здорово.
@ Дункан:
Спасибо. Я изучил это, но я не совсем уверен во всех шагах, которые мне нужно предпринять. Особенно то, что они означают в коде. Может, здесь кто-нибудь поможет мне. Большое спасибо!
Шифрование
- Сгенерируйте случайную соль шифрования
- Сгенерируйте ключ шифрования с помощью PBKDF2 (см. Документацию на вашем языке, чтобы узнать, как это вызвать). Передайте пароль в виде строки, случайную соль шифрования и 10 000 итераций.
- Создать случайную соль HMAC
- Сгенерируйте ключ HMAC с помощью PBKDF2 (см. Документацию на вашем языке, чтобы узнать, как это вызвать). Передайте пароль в виде строки, случайную соль HMAC и 10 000 итераций.
- Создать случайный IV
- Зашифруйте данные, используя ключ шифрования (вверху), IV (вверху), AES-256 и режим CBC. Это режим по умолчанию почти для всех библиотек шифрования AES.
- Передайте свой заголовок и зашифрованный текст в функцию HMAC вместе с ключом HMAC (см. Выше) и PRF «SHA-256» (названия функций PRF см. В документации вашей библиотеки; это также можно назвать «SHA- 2, 256 бит »).
- Соедините эти элементы вместе в формате, указанном выше.