私のアプリの 1 つで、iOS 用の Rob Napier の AES 暗号化方式を正常に実装しました。JavaScript の実装を使用して、そのアプリからファイルを暗号化および復号化できるようにしたいと考えています。FileReader を使用してユーザーからローカルを取得し、それをロードしています
reader.readAsArrayBuffer(file);
これが完了すると、ファイルはStanford JavaScript Crypto Libraryを使用して暗号化され、最終的に暗号化されたファイルをダウンロードできます。
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 ソルトを生成する
- PBKDF2 を使用して HMAC キーを生成します (これを呼び出す方法については、言語のドキュメントを参照してください)。パスワードを文字列、ランダムな HMAC ソルト、および 10,000 回の反復として渡します。
- ランダムな IV を生成する
- 暗号化キー (上記)、IV (上記)、AES-256、および CBC モードを使用してデータを暗号化します。これは、ほぼすべての AES 暗号化ライブラリのデフォルト モードです。
- ヘッダーと暗号文を HMAC キー (上記) および PRF "SHA-256" と共に HMAC 関数に渡します (PRF 関数の名前についてはライブラリのドキュメントを参照してください。これは "SHA- 2、256 ビット」)。
- これらの要素を上記の形式にまとめます。