Miért dob hibát? (titkosítás, java, többi lent)
A kód:
try{
byte[] cipher = encrypt(szoveg, encryptionKey);
System.out.print("cipher: ");
for (int i=0; i<cipher.length; i++)
System.out.print(new Integer(cipher[i])+" ");
System.out.println("");
String decrypted = decrypt(cipher, encryptionKey);
System.out.println("decrypt: " + decrypted);
} catch (Exception e) {
e.printStackTrace();
}
Ha a szoveg azzal egyenlő, hogy:
"wwwwwwwwwwwwwwwwwwwwwwwwwwwww";
vagy:
"ü"
akkor egyenlő a hibával:
javax.crypto.IllegalBlockSizeException: Input length not multiple of 16 bytes
at com.sun.crypto.provider.CipherCore.finalNoPadding(CipherCore.java:1016) at com.sun.crypto.provider.CipherCore.finalNoPadding(CipherCore.java:1016)
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:984)
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:824)
at com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:436)
at javax.crypto.Cipher.doFinal(Cipher.java:2121)
Csak és kizárólag a példaszöveggel működik, ami ez:
"test text 123\0\0\0";
Lefelejtettem:
public static byte[] encrypt(String plainText, String encryptionKey) throws Exception {
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding", "SunJCE");
SecretKeySpec key = new SecretKeySpec(encryptionKey.getBytes("UTF-8"), "AES");
cipher.init(Cipher.ENCRYPT_MODE, key,new IvParameterSpec(IV.getBytes("UTF-8")));
return cipher.doFinal(plainText.getBytes("UTF-8"));
}
public static String decrypt(byte[] cipherText, String encryptionKey) throws Exception{
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding", "SunJCE");
SecretKeySpec key = new SecretKeySpec(encryptionKey.getBytes("UTF-8"), "AES");
cipher.init(Cipher.DECRYPT_MODE, key,new IvParameterSpec(IV.getBytes("UTF-8")));
return new String(cipher.doFinal(cipherText),"UTF-8");
}
Kk. :)
De a köv. hiba erre megy:(még ugyanaz a gond)
return cipher.doFinal(plainText.getBytes("UTF-8"));
Erre a returnra csak ennyit ír:
at szakdolgozat2.Titkosit.encrypt
Gondolom ugyanúgy az a 16-os izéség....
Blokk titkosítót használsz, ami egyszerre 16 byteokkal dolgozik és nem paddingelted ki a maradékot, így nem tudja befejezni.
Nem tudom mit bűvészkedsz vele, de a java-ban meg lehet az AES-t könnyen oldani anélkül, hogy manuálisan kéne piszkálni, keress a neten tutorial.
(Mondjuk ha már ez egy szakdolgozat akkor hajrá, küzdj meg érte!)
De legalább a hibát értelmezhetnéd - oda van írva egyértelműen, hogy "Input length not multiple of 16 byte".
Ennél tisztább hibaüzenetet nehéz kapni... Nem bántásképpen, de te így írsz szakdolgozatot programozásból? Hát nem örülnék neki, ha a kollégám lennél.
Látszik, hogy ezek a mai Java "fejlesztők" nem programoztak például C++ban, ahol egy lemaradt pontosvesszőért 150 soros értelmezhetetlen hibaüzenetet kaphatsz...
Ki van nyalva a seggük a mai modern fordítókkal, de el sem olvassák a hibaüzeneteket...
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!