私はJavaでファイルを暗号化しており、クライアント側で解読する必要があります。 これはサーバー側コードです:Javaからファイルbytearrayを解読するCryptoJS(AES)
var xhr = new XMLHttpRequest();
xhr.open('GET', 'file', true);
xhr.responseType = 'arraybuffer';
xhr.onload = function (e) {
var encryptedData = this.response;
var decrypted = CryptoJS.AES.decrypt(encryptedData, "mysecretmysecret");
console.log(decrypted);
};
xhr.send();
しかし、これはファイルの暗号化を解除しない:私は、ファイルを取得し、CryptoJS AESを使用するAjaxリクエストを使用してクライアント側で
Key secretKey = new SecretKeySpec("mysecretmysecret".getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] outputBytes = cipher.doFinal(read(sampleFile));
return outputBytes;
。私は、これはコンソールで解読さの値として印刷され得る:
W…y.init {words: Array[0], sigBytes: 0}
私もhereを示唆したが、それでも同じ結果WordArrayにarraybuffer変換しようとしています。 誰かが私を正しい方向に向けることができ、私が間違っていたことを教えてくれるなら、私は喜んでいるでしょう。
編集1: 私はこの問題を解決しました。私が使ったコードは答えとして掲示されています。
"mysecretmysecret"は、おそらくクライアントのソースコード内にそのシークレットが存在する場合、その秘密ではありません。 @AlexK。 –
これは単なるPOCです。まだ実際のコードにはありません。 – Sandeep
文字列をキーとして使用しないで、バイト配列を使用します。文字列からバイト配列への変換はあいまいです(開始時のBoM?ターミネータ\ 0など)。特に、システム間で暗号化されたデータを転送するときは**システムのデフォルトに依存しません。明示的にモード、IV/Nonceなどを設定します。あなたはこれをほとんどやっておらず、システム全体でデフォルトに頼っています。一致しないデフォルト値は問題を引き起こします。 – rossum