2017-08-30 18 views
0

enter image description here JavaでJPGファイルをAESで暗号化したいが、javascriptでJPGファイルを解読する方法がわからない。誰もが良いアイデアを持っていますか? これは私のJavaコードである。AESでJavaで暗号化されたCryptoJSのファイルを解読する方法

`private static void EncFile(File srcFile, File encFile) throws Exception 
     { 
      if(!srcFile.exists()){ 
      System.out.println("source file not exixt"); 
      return; 
     }// 
     if(!encFile.exists()){ 
      System.out.println("encrypt file created"); 
      encFile.createNewFile(); 
     } 

    byte[] bytes = new byte[1024*8]; 
    String key = "1234567812345678"; 
    String iv = "1234567812345678"; 
    Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); 
    int blockSize = cipher.getBlockSize(); 
    SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES"); 
    IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes()); 
    cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec); 


    InputStream fis = new FileInputStream(srcFile); 
    // CipherInputStream cin = new CipherInputStream(fis, cipher); 
    OutputStream fos = new FileOutputStream(encFile); 

    while ((dataOfFile = fis.read(bytes)) >0) { 


     byte[] encrypted = cipher.doFinal(bytes); 
     fos.write(encrypted,0,dataOfFile); 
    } 

    fis.close(); 
    fos.flush(); 
    fos.close(); 
}` 

この私のjavasciptコード、私はそれを行う方法を

var key = CryptoJS.enc.Latin1.parse('1234567812345678'); 
    var iv = CryptoJS.enc.Latin1.parse('1234567812345678'); 

var url = "http://192.168.0.103/show3d_test/test/CR4/E1234.png"; 

var xhr = new XMLHttpRequest(); 
xhr.open("GET",url,true); 
xhr.responseType = "arraybuffer"; 
xhr.onload = function() { 
    if(xhr.readyState ==4){ 
    if (xhr.status == 200){ 
     process(xhr.response,key); 
    } 
    } 
} 
xhr.send(); 


function process(buffer,key) { 
var view = new Uint8Array(buffer); 
var contentWA = CryptoJS.enc.u8array.parse(view); 
var dcBase64String = contentWA.toString(CryptoJS.enc.Base64); 
var decrypted = CryptoJS.AES.decrypt(dcBase64String,key, 
{iv:iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.NoPadding}); 

var d64 = decrypted.toString(CryptoJS.enc.Base64); 


var img = new Image; 
img.src = "data:image/png;base64,"+d64; 
document.body.append(img); 
} ` 

誰もが知っているんCryptoJSと復号化を使用していますか?私はCryptoJS - Javaの暗号化/復号化について多くの例を見てきましたが、それらのほとんどはハードコーディングされたIV /キーを使用しています。あるいは、cryptoJS側からJava側にIV /キーを送信するだけです。私が持っているのは、このサイトのように、パスフレーズだけです!

+0

この画像を復号化すると、成功した部分のみを復号化できることがわかります。この写真はディスプレイの一部のみを示しています – sunday

答えて

0

正確な質問は何かわかりませんが、これが役立ちます。

IVの一般的で安全な方法は、CSPRNG(ランダムバイト)で暗号化データを作成し、暗号化されたデータにIVを付加して復号化できるようにすることです。 IVは秘密にする必要はありません。

"AES/CBC/NoPadding"を使用する場合、入力はブロックサイズの正確な倍数(AESの場合は16バイト)でなければなりません。一般に、PKCS#7(PKCS#5)のパディングが指定されているため、暗号化するデータ長に制限はありません。

関連する問題