Krypterad Java<->PHP Socket (BadPaddingException)

Permalänk
Medlem

Krypterad Java<->PHP Socket (BadPaddingException)

Hej!

Jag försöker göra en socket anslutning mellan en websida i PHP och en Java applikation.
Anslutningen måste vara krypterad på något sätt.

Jag har försökt i två dagar nu men jag lyckas inte få till det. valigt text har jag inte haft någora probem med, det är själva krypteringen och dekrypteringen som inte fungerar.

Vad jag förstått så är Rijndael och AES samma krypterings algorthm.

Felmeddelandet jag får i Javaapplikationen när jag ska dekryptera datan är:
javax.crypto.BadPaddingException: Given final block not properly padded

PHP(socket client)

$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, ''); $key128 = '1234567890123456'; $iv = '1234567890123456'; $cleartext = 'Denna text ska krypteras och dekrypteras'; echo "Len: ".strlen($cleartext); if (mcrypt_generic_init($cipher, $key128, $iv) != -1) { $cipherText = mcrypt_generic($cipher,$cleartext ); mcrypt_generic_deinit($cipher); printf("<br /><br />128-bit encrypted result:\n%s\n\n",bin2hex($cipherText)); } echo "Len: ".strlen($cipherText); $host="*IP*" ; $port=4444; $timeout=10; $sk=fsockopen($host,$port,$errnum,$errstr,$timeout) ; if (!is_resource($sk)) { exit("connection fail: ".$errnum." ".$errstr) ; } else { fputs($sk, $cipherText) ; $dati="" ; while (!feof($sk)) { $dati.= fgets ($sk, 1024); } } fclose($sk) ; echo($dati) ;

Java(Socket server)

//String key1 = "1234567812345678"; String key1 = "1234567890123456"; byte[] key2 = key1.getBytes(); SecretKeySpec secret = new SecretKeySpec(key2, "AES"); try { in = new DataInputStream(s.getInputStream()); out = new DataOutputStream(s.getOutputStream()); Cipher inCipher = Cipher.getInstance("AES"); inCipher.init(Cipher.DECRYPT_MODE, secret); byte b2; String str, str2; byte[] b = new byte[32]; int count; while((count = in.read(b)) >= 0 ) { System.out.println("count: " + count); str = new String(b); System.out.println("string: " + str); byte[] decrypted = inCipher.doFinal(b); str2 = new String(decrypted); System.out.println("decrypted: " + str2); str = new String(b); System.out.println("string: " + str); } } catch (Exception e) { System.out.println(e); }

Visa signatur

Bloggar om Hemautomation på HomeAutomateIt.com

Permalänk
Medlem

Varför inte bara använda SSL?

Visa signatur

Intel Core i7-3770K | NVIDIA Geforce GTX 980 | 16 GB DDR3 | DELL P2415Q | DELL U2711 | DELL U2410

Permalänk
Medlem

Ehm, jadu.
Det är förmodligen en bättre ide

Visa signatur

Bloggar om Hemautomation på HomeAutomateIt.com

Permalänk
Glömsk

Plaintext måste ha en längd som är en multipel av 16. Din exempeltext har längd 40.

Detta löses genom att lägga till tecken i slutet (padding) så att texten får rätt längd. En vanlig lösning är att du paddar med längden, exempelvis om du behöver 7 extra bytes för att din text ska vara tillräckligt lång lägger du till "\x07\x07\x07\x07\x07\x07\x07" (sju stycken 0x07). Det är då enkelt för mottagaren att ta bort rätt mängd padding.

Visa signatur

...man is not free unless government is limited. There's a clear cause and effect here that is as neat and predictable as a law of physics: As government expands, liberty contracts.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Psionicist
Plaintext måste ha en längd som är en multipel av 16. Din exempeltext har längd 40.

Detta löses genom att lägga till tecken i slutet (padding) så att texten får rätt längd. En vanlig lösning är att du paddar med längden, exempelvis om du behöver 7 extra bytes för att din text ska vara tillräckligt lång lägger du till "\x07\x07\x07\x07\x07\x07\x07" (sju stycken 0x07). Det är då enkelt för mottagaren att ta bort rätt mängd padding.

Jo, precis.
Men vad jag förstår så görs detta automatiskt på den här raden:

$cipherText = mcrypt_generic($cipher,$cleartext );

Jag testade även med en text med en 32 bitar lång text men det gjorde ingen skillnad.
Det verkar lättare med SSL, men kan jag göra det utan certifikat(självsingerat eller inte)?

Visa signatur

Bloggar om Hemautomation på HomeAutomateIt.com