Ho visto alcune altre domande a riguardo ma gli errori erano relativi a uno 0 iniziale nella stringa. Questo purtroppo non è il mio caso.NumberFormatException sul numero valido Stringa
Ricevo dati crittografati da una fonte esterna in formato base64, quindi decodifico (utilizzando una libreria Base64 inclusa perché la versione di sdk di Android è 7), decrittografare il messaggio e, dopo tutto, ho una semplice stringa in un formato numerico.
Quando provo a lanciarlo a Long
o Integer
ottengo questo errore:
java.lang.NumberFormatException: Invalid long: "2551122"
at java.lang.Long.invalidLong(Long.java:125)
at java.lang.Long.parse(Long.java:362)
at java.lang.Long.parseLong(Long.java:353)
at java.lang.Long.parseLong(Long.java:319)
at com.nzn.lol.LoginActivity$LoginTask.doInBackground(LoginActivity.java:98)
at com.nzn.lol.LoginActivity$LoginTask.doInBackground(LoginActivity.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:264)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
Per controllare l'ingresso ho usato stampe ed è davvero la stringa "2.551.122". Quando provo controllare l'uguaglianza, non è anche corretto
"2551122".equals(numberAsString) // Gives me false
ho pensato che fosse un problema di codifica e provato a prendere i byte decodificati e creando stringhe in diverse codifiche, tentò anche di decodificare i byte dal base64 stringa con queste stesse diverse codifiche e non ha ancora idea di cosa stia causando questo errore.
Si prega di ogni aiuto è apprezzato
UPDATE
Questo è il codice per decifrare la stringa (classe Encryptor):
private static byte[] decrypt(byte[] raw, byte[] encrypted) throws Exception {
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance(encryptionAlgorithim);
cipher.init(Cipher.DECRYPT_MODE, skeySpec, new IvParameterSpec(iVector));
byte[] decrypted = cipher.doFinal(encrypted);
return decrypted;
}
public String decrypt(String encryptedString, String key) {
byte[] keyBytes = key.getBytes();
byte[] decoded = Base64.decode(encryptedString); // Decodes the string from base64 to byte[]
byte[] result = decrypt(keyBytes, decoded);
return new String(result);
}
Questo è come l'errore viene generato:
Encryptor encryptor = new Encryptor();
Long.parseLong(encryptor.decrypt(base64String, secretKey)) // Throws me the error
puoi pubblicare il codice in cui l'hai lanciato? – javajavajava
domanda interessante, per favore inserisci anche il codice .. – AAnkit
Potresti per favore postare il tuo codice? –