AES CBC Problem

AHoernchen84

Grünschnabel
Hallo,

ich bin noch im Studium und da müssen ja ab und zu auch mal Aufgaben gemacht werden. Ich soll also zwei Strings die beide gleich sind unterschiedlich verschlüsseln. Das mache ich mittels AES/CBC. Dazu habe ich folgenden Code geschrieben:

Code:
               Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
		
		String plaintext = "Hallo!";
		String plaintext2 = "Hallo!";
		byte[] input = plaintext.getBytes();
		byte[] input2 = plaintext2.getBytes();
		
		
		try {
			KeyGenerator kgen = KeyGenerator.getInstance("AES", "BC");
			kgen.init(128);
			SecretKey secKey  = kgen.generateKey();
			Key key = new SecretKeySpec( secKey.getEncoded(), "AES" );
			
			// Encryption.
			Cipher cipher = Cipher.getInstance( "AES/CBC/PKCS7Padding", "BC" );
			cipher.init(Cipher.ENCRYPT_MODE, key);
			IvParameterSpec spec = cipher.getParameters().getParameterSpec(IvParameterSpec.class);
			byte[] iv = spec.getIV();
			byte[] cipherText = cipher.doFinal(input);
			byte[] cipherText2 = cipher.doFinal(input2);
			String s1 = new Base64().encodeBase64String( cipherText );
			String s2 = new Base64().encodeBase64String( cipherText2 );
			
			System.out.println("CipherText: " +s1 +", CipherText2: " +s2);	
			
		} catch (NoSuchAlgorithmException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchProviderException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchPaddingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvalidKeyException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvalidParameterSpecException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalBlockSizeException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (BadPaddingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

Jetzt ist mein Problem, dass beide Strings gleich verschlüsselt werden, was doch eigentlich beim CBC-Mode nicht so sein sollte.

Hoffentlich kann mir da jemand weiterhelfen.

Viele Grüße
 
Was erwartest du:

Java:
            byte[] cipherText = cipher.doFinal(input);
            byte[] cipherText2 = cipher.doFinal(input2);
...
            String s1 = new Base64().encodeBase64String( cipherText );
            String s2 = new Base64().encodeBase64String( cipherText2 );

Wenn ich das richtig sehe, lässt du auf beide Strings die gleiche Methode los?!
 
Jo aber

Code:
byte[] input = plaintext.getBytes();
byte[] input2 = plaintext2.getBytes();

 byte[] cipherText = cipher.doFinal(input);
 byte[] cipherText2 = cipher.doFinal(input2);

 String s1 = new Base64().encodeBase64String( cipherText );
 String s2 = new Base64().encodeBase64String( cipherText2 );
Wenn das ein google copy paste code ist , versuch mal zu verstehen was du da machst. Am besten erklärst du diesen Code einem Freund oder so. Mit Hilft sowas

Samy
 
Zuletzt bearbeitet von einem Moderator:
Zurück