Sto realizzando una MIDlet che cifri e decifri SMS. Utilizzo per le operazioni crittografiche l'algorimo AESlight (Rijndael) con le librerie di Bouncy Castle.
Invio il messaggio cifrato come messaggio binario (per non perdere dati nel trasformarlo in stringa e di nuovo in byte), tuttavia quando il device ricevente prova a decifrare il messaggio viene generato un messaggio di errore che dice "pad block corrupted ".
Ho fatto dei test:
1) Il codice che decifra è corretto, in quanto PRIMA di inviarlo come binario, lo faccio decifrare, ed il risultato corrisponde con il testo in chiaro.
2) Verifico che l'array di byte da inviare corrisponda con quello ricevuto...e corrispondono!
Non so proprio perché venga generato questo messaggio.
Questo è il codice che decifra l'SMS:
AESLightEngine engine = new AESLightEngine();
CBCBlockCipher cbc = new CBCBlockCipher(engine);
BufferedBlockCipher cipher = new PaddedBufferedBlockCipher(cbc);
ParametersWithIV piv = new ParametersWithIV((new KeyParameter(AESkey)),initVector);
cipher.init(false, piv);
byte[] result = new byte[cipher.getOutputSize(cipheredText.length)];
int len = cipher.processBytes(cipheredText, 0, cipheredText.length, result, 0);
cipher.doFinal(result, len);
plainText = new String(result);
Che tuttavia mi pare corretto in quanto decifra correttamente (lato mittente, PRIMA dell'invio),quindi penso il problea risieda nell'invio/ricezione del messaggio binario.
Il codice di invio è il seguente:
smsconn = (MessageConnection)Connector.open(address);
BinaryMessage binmessage = (BinaryMessage)smsconn.newMessage(MessageConnectio n.BINARY_MESSAGE);
binmessage.setAddress(address);
binmessage.setPayloadData(binaryTextToSend);
smsconn.send(binmessage);
Mentre per la ricezione, ottengo l'array binario attarverso il metodo: data = ((BinaryMessage)msg).getPayloadData();
Qualcuno potrebbe aiutarmi?
Grazie,
Francesco