2016-04-06 22 views
0

java kullanarak bir AES 256 cbc şifrelemesi oluşturmaya çalışıyorum ve bu javascript kodunu EXACTLY öykünmesi gerekiyor (iv'in anahtarla aynı olduğunu biliyorum (16 bayta çevrilmiştir), tam çıkış aynı olacak bir java kodu yapmak gerekir Su92ZXLm/MdOyruRnWDRqQ ==farklı çıktı AES 256 cbc

: bu i

var recievedStr = "MDk4NTY1MDAyMjg2MTU1OA=="; //some 
var key = CryptoJS.enc.Base64.parse(recievedStr); 
var iv = CryptoJS.enc.Base64.parse(recievedStr); 
var pw = "PASSWORD"; 

var encres = CryptoJS.AES.encrypt(pw, key, {iv:iv, keySize: 256, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7}); 
var finalStr = encres.toString(); 

finalStr olacaktır) java kullanarak oturum çalışıyorum sitesinden nasıl budur javascript'ten finalStr olarak çıktı. Bunun için bouncy kalesini kullanıyorum.

 String recievedStr = "MDk4NTY1MDAyMjg2MTU1OA=="; 
     String pw = "PASSWORD"; 
     AESEngine blockCipher = new AESEngine(); 
      CBCBlockCipher cbcCipher = new CBCBlockCipher(blockCipher); 
    BufferedBlockCipher cipher = new PaddedBufferedBlockCipher (cbcCipher); 
    byte[] key = encodeBase64(recievedStr); 
    byte [] iv = java.util.Arrays.copyOf(key,16); 
    byte[] input = pw.getBytes(); 
    ParametersWithIV pwIV= new ParametersWithIV(new KeyParameter(key),iv); 
    cipher.init(true, pwIV); 
    byte[] cipherText = new byte[cipher.getOutputSize(input.length)]; 
    int outputLen = cipher.processBytes(input, 0, input.length, cipherText, 0); 
    try 
    { 
     cipher.doFinal(cipherText, outputLen); 
    } 
    catch (CryptoException ce) 
    { 
     System.err.println(ce); 
     } 
     System.out.println(new String(Base64.encodeBase64(cipherText))); 

bu irade çıkışı: Ben orijinal girişine şifresini olurken qEGQ1PC/QKxfAxGBIbLKpQ ==

, yani istediğim şey bu değil. Javascript'in tam olarak ne yaptığını çıktı almak için java koduma ihtiyacım var. Buna nasıl yaklaşılacağına dair 0 fikrim var.

Teşekkürler.

DÜZENLEME: sorun çözüldü, alınan dizgeyi kodlamak yerine base64'e çözmem gerekiyordu.

+1

, encodeBase64 (recievedStr) yerine decodeBase64 (recievedStr) olmamalıdır? – AdrianEddy

+0

tam olarak bu oldu! thx – user1827217

+0

"MDk4NTY1MDAyMjg2MTU1OA ==" kodu çözüldüğünde 16 bayt uzunluğundadır, yani AES-128 ve AES-256 değil demektir. Gerçek bir anahtar verildiğinde 'keySize' özelliği göz ardı edilir. Yine de yanlış olur, çünkü 'keySize: 256/32' anahtar boyutunu tanımlamanın doğru yolu olur. –

cevap

0

Sanırım doğru yoldasınız. Ama sanırım AES-256 yerine AES-128 ile çalışıyorsunuz. Java 256-bit AES Password-Based Encryption 'a bir bakışınız varsa, belki yararlı bir şeyler bulabilirsiniz.

+0

im aes-256'yı kod örneğinde çalıştırıyorum (varsayılan dolgu pkc7, cbc modudur). – user1827217

İlgili konular