2017-02-13 6 views
0

Ich versuche, eine Verschlüsselung/Entschlüsselung einzurichten. Der Verschlüsselungsmodus ist ECB, der den AES-Algorithmus verwendet. Für die Verschlüsselung verwende ich CryptoJS als Teil meiner Anwendung. Der folgende Code wird verwendet, um zu verschlüsseln:Verschlüsseln von Daten mit CryptoJS und Entschlüsseln mit AESCipherService

 var keyHex = CryptoJS.enc.Utf8.parse(key); 
     alert(keyHex + ":" + keyHex.toString().length); 


     var cipherText = CryptoJS.enc.Base64.stringify(CryptoJS.AES.encrypt(inputString, keyHex, {mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.NoPadding}).ciphertext); 
     console.log("Encrypted: " + cipherText); 

Für die Entschlüsselung, ich bin der AESCipherService von Shiro mit entschlüsseln. Ich habe den folgenden Code:

public static String decryptUsingShiro(String base64EncodedData, String key) { 
     byte[] base64decoded = Base64.decodeBase64(base64EncodedData.getBytes()); 
     AesCipherService decryptService = new AesCipherService(); 
     decryptService.setMode(OperationMode.ECB); 
     decryptService.setPaddingScheme(PaddingScheme.PKCS5); 
     ByteSource decrypt = decryptService.decrypt(base64decoded, key.getBytes()); 
     return new String(decrypt.getBytes()); 
    } 

ich die folgende Ausnahme erhalten:

Verursacht durch: javax.crypto.IllegalBlockSizeException: Eingangslänge Vielfaches von 16 sein muss, wenn mit gepolstertem Chiffre

Entschlüsseln

Alles falsch, was ich auf der Verschlüsselungsseite mache?

Antwort

1

Sie verwenden den Padding-Modus "NoPadding", daher muss die Eingabe eine vollständige Blockgrenze erreichen (n * 16 Byte), um erfolgreich zu verschlüsseln. Sie sollten stattdessen PKCS7Padding verwenden. (Anmerkung: PKCS # 7 ist referred to (incorrectly) as PKCS #5 in Java - sie im Wesentlichen gleich sind und für diese Zwecke ist PaddingScheme.PKCS5 richtig.)

Zusätzlich you should not use ECB mode. EZB ist trivial gebrochen und ist überhaupt nicht sicher. Verwenden Sie wenn möglich einen authentifizierten Verschlüsselungsmodus (GCM/EAX/CCM) oder andernfalls CBC/CTR + HMAC.

+0

danke. das hat wie ein Zauber funktioniert. Ich werde meinen Code ändern, um den CBC-Modus anstelle von EZB zu verwenden. –

Verwandte Themen