Archief - [JAVA] AES encryptie lijkt fout

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Curahee Q

Legacy Member
Dag iedereen

Ik ben bezig met een applicatie om te zetten van Java naar C++. De Java applicatie maakt gebruik van AES encryptie in ECB mode.

Ik heb hieronder even een sample toegevoegd
data: abcd
key: 746869734973415365637265744b6579

De Java code ziet er als volgt uit:

Code:
public class StartUp {

	public static void main(String[] args) throws Exception {
		String data = "abcd";
		String key = "746869734973415365637265744b6579";
		
		byte[] arrayOfByte1 = hexToByte(key);
		byte[] dataByte = data.toString().getBytes("UTF-8");

		SecretKeySpec localSecretKeySpec = new SecretKeySpec(arrayOfByte1, "AES");
		
		Cipher localCipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
		localCipher.init(Cipher.ENCRYPT_MODE, localSecretKeySpec);
		byte[] cip = localCipher.doFinal(dataByte);
		
		StringBuilder buf = new StringBuilder();
		for(int i=0; i<cip.length; i++) {
			buf.append(Integer.toHexString(cip[i] & 0xFF));
		}

		System.out.println(buf.toString());
	}

	public static byte[] hexToByte(String paramString)
	{
	    int i = paramString.length();
	    byte[] arrayOfByte = new byte[i / 2];
	    for (int j = 0; j < i; j += 2)
	      arrayOfByte[(j / 2)] = (byte)((Character.digit(paramString.charAt(j), 16) << 4) + Character.digit(paramString.charAt(j + 1), 16));
	    return arrayOfByte;
	}
}

Als ik dit uitvoer dan krijg ik als output (hex): d2e6a5d9e17fc5538e6aea2d644ecb

Wanneer ik echter in C++ de AES encryptie toepas krijg ik dezelfde output als dat ik het via een website doe (AES Encryption ? Easily encrypt or decrypt strings or files).
Die output is: 0cef7540c3a7ea4d37accd6a02f9e979

Zie ik nu iets over het hoofd of is er iets mis met de implementatie in Java :)? Wat me straf zou lijken dus mijn gedacht is dat ik iets mis doe maar ik zie niet wat.

Als ik de Java output wil decrypten op die website, dan geeft die website ook de fout: Decryption failed. Provided encrypted text is not valid.

Alvast bedankt!

Curahee Q

Legacy Member
Ik heb mijn fout gevonden.

De website die de encryptie doet, en ook mijn C++ applicatie verwachtte de key niet in HEX formaat maar gewoon als string. In dit geval thisIsASecretKey en niet de hex waarde daarvan. Met deze aanpassing komen al de drie uitkomsten overeen met elkaar.

Tyfius

Legacy Member
Goed dat je het gevonden hebt. :)

Ik ken er jammer genoeg te weinig van om het uit te zoeken, waar was wel geïntrigeerd door het probleem. :)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan