Autore Topic: Classe funzionante smette di funzioare se la porto in un progetto android  (Letto 1184 volte)

Offline titanum

  • Nuovo arrivato
  • *
  • Post: 47
  • Respect: 0
    • Mostra profilo
Ciao ragazzi, sono alle prese con l'algoritmo di crittografia Rc4, su internet ho trovato questa classe che funziona se la lancio come java application funziona, se la porto in un progetto android no... Sapete dirmi come mai? Di seguito posto il codice della classe ed il logcat

Codice: [Seleziona]

import java.io.IOException;
import java.math.BigInteger;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;

public class Rcc4 {
       
    public Rcc4(){}

    public byte[] encrypt(byte[] plaintext,byte[] keyBytes)
    {
        byte[] e = null;
        try
        {
            Key key = new SecretKeySpec(keyBytes,"RC4");
            Cipher enCipher = Cipher.getInstance("RC4");
            enCipher.init(Cipher.ENCRYPT_MODE ,key);
            e = enCipher.doFinal(plaintext);           
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
        }
        return e;
    }
    public byte[] decrypt(byte[] ciphertext,byte[] keyBytes)
    {
        byte de[] = null;
        try
        {
           Key key = new SecretKeySpec(keyBytes,"RC4");
            Cipher deCipher = Cipher.getInstance("RC4");
           deCipher.init(Cipher.DECRYPT_MODE, key);
            de = deCipher.doFinal(ciphertext);
        }
        catch(Exception e) {
            e.printStackTrace();
        }
        return de;

    }

    public Key getKey()
    {
        Key key = null;
        try
        {
            SecureRandom sr = new SecureRandom();
            KeyGenerator kg = KeyGenerator.getInstance("RC4");
            kg.init(128,sr);
            key = kg.generateKey();
        }catch(Exception e)
        {
            e.printStackTrace();
        }
        return key;
    }
    public String keyGet()
    {
        Key k = getKey();
        byte[] b = k.getEncoded();
    BigInteger big = new BigInteger(b);
        String s = big.toString();
        return s;
    }

    }

codice della mainActivity, che doveva semplicemente cifrare e decifrare una riga di testo e scrivere rispettivi valori nelle textview

Codice: [Seleziona]

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        String test = "prova rc4";
        TextView textView1 = (TextView) findViewById(R.id.textView1);
        TextView textView2 = (TextView) findViewById(R.id.textView1);
        TextView textView3 = (TextView) findViewById(R.id.textView1);
       
        Rcc4 rc4 = new Rcc4();
        System.out.println(rc4.keyGet());
       
        byte b[] = rc4.keyGet().getBytes();
        byte plain[] = test.getBytes();
        byte encoded[] = rc4.encrypt(plain,b);
        byte decoded[] = rc4.decrypt(encoded,b);
       
        textView1.setText("stringa originale: "+test);
        textView2.setText("stringa crittografata: "+new String(encoded));
        textView3.setText("stringa decriptata: "+new String(decoded));
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

   
}


Codice: [Seleziona]
09-12 12:17:02.469: W/System.err(271): java.security.NoSuchAlgorithmException: KeyGenerator RC4 implementation not found
09-12 12:17:02.479: W/System.err(271):         at org.apache.harmony.security.fortress.Engine.getInstance(Engine.java:105)
09-12 12:17:02.479: W/System.err(271):         at javax.crypto.KeyGenerator.getInstance(KeyGenerator.java:106)
09-12 12:17:02.479: W/System.err(271):         at it.paybay.Rcc4.getKey(Rcc4.java:58)
09-12 12:17:02.479: W/System.err(271):         at it.paybay.Rcc4.keyGet(Rcc4.java:69)
09-12 12:17:02.479: W/System.err(271):         at it.paybay.MainActivity.onCreate(MainActivity.java:28)
09-12 12:17:02.479: W/System.err(271):         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
09-12 12:17:02.489: W/System.err(271):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
09-12 12:17:02.489: W/System.err(271):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
09-12 12:17:02.489: W/System.err(271):         at android.app.ActivityThread.access$2300(ActivityThread.java:125)
09-12 12:17:02.489: W/System.err(271):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
09-12 12:17:02.489: W/System.err(271):         at android.os.Handler.dispatchMessage(Handler.java:99)
09-12 12:17:02.489: W/System.err(271):         at android.os.Looper.loop(Looper.java:123)
09-12 12:17:02.489: W/System.err(271):         at android.app.ActivityThread.main(ActivityThread.java:4627)
09-12 12:17:02.489: W/System.err(271):         at java.lang.reflect.Method.invokeNative(Native Method)
09-12 12:17:02.499: W/System.err(271):         at java.lang.reflect.Method.invoke(Method.java:521)
09-12 12:17:02.499: W/System.err(271):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-12 12:17:02.499: W/System.err(271):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-12 12:17:02.499: W/System.err(271):         at dalvik.system.NativeStart.main(Native Method)
09-12 12:17:02.499: D/AndroidRuntime(271): Shutting down VM
09-12 12:17:02.499: W/dalvikvm(271): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
09-12 12:17:02.509: E/AndroidRuntime(271): FATAL EXCEPTION: main
09-12 12:17:02.509: E/AndroidRuntime(271): java.lang.RuntimeException: Unable to start activity ComponentInfo{it.paybay/it.paybay.MainActivity}: java.lang.NullPointerException
09-12 12:17:02.509: E/AndroidRuntime(271):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
09-12 12:17:02.509: E/AndroidRuntime(271):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
09-12 12:17:02.509: E/AndroidRuntime(271):         at android.app.ActivityThread.access$2300(ActivityThread.java:125)
09-12 12:17:02.509: E/AndroidRuntime(271):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
09-12 12:17:02.509: E/AndroidRuntime(271):         at android.os.Handler.dispatchMessage(Handler.java:99)
09-12 12:17:02.509: E/AndroidRuntime(271):         at android.os.Looper.loop(Looper.java:123)
09-12 12:17:02.509: E/AndroidRuntime(271):         at android.app.ActivityThread.main(ActivityThread.java:4627)
09-12 12:17:02.509: E/AndroidRuntime(271):         at java.lang.reflect.Method.invokeNative(Native Method)
09-12 12:17:02.509: E/AndroidRuntime(271):         at java.lang.reflect.Method.invoke(Method.java:521)
09-12 12:17:02.509: E/AndroidRuntime(271):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-12 12:17:02.509: E/AndroidRuntime(271):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-12 12:17:02.509: E/AndroidRuntime(271):         at dalvik.system.NativeStart.main(Native Method)
09-12 12:17:02.509: E/AndroidRuntime(271): Caused by: java.lang.NullPointerException
09-12 12:17:02.509: E/AndroidRuntime(271):         at it.paybay.Rcc4.keyGet(Rcc4.java:70)
09-12 12:17:02.509: E/AndroidRuntime(271):         at it.paybay.MainActivity.onCreate(MainActivity.java:28)
09-12 12:17:02.509: E/AndroidRuntime(271):         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
09-12 12:17:02.509: E/AndroidRuntime(271):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
09-12 12:17:02.509: E/AndroidRuntime(271):         ... 11 more


Offline Il.Socio

  • Nuovo arrivato
  • *
  • Post: 41
  • Respect: +3
    • marcobellino
    • Mostra profilo
    • Guardian-Mobile
Re:Classe funzionante smette di funzioare se la porto in un progetto android
« Risposta #1 il: 12 Settembre 2012, 13:37:43 CEST »
+1
Sapete dirmi come mai?
Codice: [Seleziona]
<CUT>
            KeyGenerator kg = KeyGenerator.getInstance("RC4");
<CUT>
09-12 12:17:02.469: W/System.err(271): java.security.NoSuchAlgorithmException: KeyGenerator RC4 implementation not found
<CUT>
Direi che è abbastanza autoesplicativo: nel framework non esiste nessuna implementazione di RC4
se hai proprio bisogno di RC4, o cerchi qualche libreria pronta che ti fornisce RC4, oppure dovrai implementarlo tu a manina.
 

Offline titanum

  • Nuovo arrivato
  • *
  • Post: 47
  • Respect: 0
    • Mostra profilo
Re:Classe funzionante smette di funzioare se la porto in un progetto android
« Risposta #2 il: 12 Settembre 2012, 14:34:38 CEST »
0
Si devo usare RS4, comincerò a cercare qualcosa di già pronto, grazie. Un'ultima domanda: io importo sempre la stessa libreria ovvero javax.crypto.*
Se in android non funziona significa che le librerie non sono le stesse? Grazie ancora

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Classe funzionante smette di funzioare se la porto in un progetto android
« Risposta #3 il: 12 Settembre 2012, 14:49:36 CEST »
+1
Se in android non funziona significa che le librerie non sono le stesse? Grazie ancora

Entro nel discorso senza avere competenza specifica su questa libreria. Tieni conto che android non è java e nemmeno si propone come perfettamente compatibile con java: il linguaggio è lo stesso (nel senso della sintassi) e le librerie usando gli stessi nomi, ma non sono fisicamente le stesse (per quelle principali è stata fatta una implementazione discretamente compatibile, altre non ci sono).
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline titanum

  • Nuovo arrivato
  • *
  • Post: 47
  • Respect: 0
    • Mostra profilo
Re:Classe funzionante smette di funzioare se la porto in un progetto android
« Risposta #4 il: 12 Settembre 2012, 15:12:35 CEST »
0
ho capito, grazie.

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Classe funzionante smette di funzioare se la porto in un progetto android
« Risposta #5 il: 12 Settembre 2012, 15:17:26 CEST »
0
Aggiungo che RC4 è un algoritmo molto vecchio, Android implementa algoritmi più recenti (e si spera più robusti).
adb logcat | tee /tmp/logcat | grep TAG

Offline titanum

  • Nuovo arrivato
  • *
  • Post: 47
  • Respect: 0
    • Mostra profilo
Re:Classe funzionante smette di funzioare se la porto in un progetto android
« Risposta #6 il: 12 Settembre 2012, 16:04:01 CEST »
0
Dove posso trovare la lista degli algoritmi implementati?

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Classe funzionante smette di funzioare se la porto in un progetto android
« Risposta #7 il: 12 Settembre 2012, 16:15:50 CEST »
0
Dove posso trovare la lista degli algoritmi implementati?

Da profano assoluto dell'argomento, io proverei con public static Provider[] getProviders (String filter)
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store