Guten Morgen liebe Leser....
Ich bastel nun schon eine ganze Weile daran einen einfachen String mit RSA zu verschlüsseln und danach wieder zu entschlüsseln.
Hintergrund ist der das ich ein PHP-Server habe welcher Daten per XML-Datei bereit stellt und empfängt.
Diese sollen nun nicht mehr in Klartext sondern verschlüsselt übertragen werden.
Dazu gibt es ja in Java nette Funktionen welche ich anhand einer Anleitung einmal versucht habe nachzuvollziehen. (Funktioniert noch mit DES aber wenns geht dann ändere ich es auf RSA)
Doch leider funktioniert das nicht wirklich......
Quelle: http://www.iks.hs-merseburg.de…nsel/javainsel_26_006.htm
Es kommt aber beim entschlüsseln der Daten immer die Fehlermeldung <<pad block corrupted>>
Diese wird in der Funktion <<decode>> geworfen.
Da ich die FOR-Schleife aus dem Beispiel in eine DO-While schleife geändert habe könnte hier der FEhler liegen.
Aber ich verstehe nicht was falsch sein könnte. Normalerweise müsste es doch funktionieren, oder?!?
Mein Quellcode sieht wie folgt aus.......
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
try
{
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
encode( "Das wird anders werden".getBytes(), out, "01234567" );
String s = new String(out.toByteArray() );
byte[] decode = s.getBytes();
InputStream ist = new ByteArrayInputStream( decode );
Toast toast = Toast.makeText(this, new String( decode( ist, "01234567" ) ), Toast.LENGTH_LONG);
toast.show();
}
catch (Exception e)
{
Toast toast = Toast.makeText(this,e.getMessage(), Toast.LENGTH_LONG);
toast.show();
}
}
catch (Exception ex)
{
// TODO Auto-generated catch block
Toast toast = Toast.makeText(this, ex.getMessage(), Toast.LENGTH_LONG);
toast.show();
}
}
static void encode( byte[] bytes, OutputStream out, String pass ) throws Exception
{
Cipher c = Cipher.getInstance( "DES" );
Key k = new SecretKeySpec( pass.getBytes(), "DES" );
c.init( Cipher.ENCRYPT_MODE, k );
OutputStream cos = new CipherOutputStream( out, c );
cos.write( bytes );
cos.close();
}
static byte[] decode( InputStream is, String pass ) throws Exception
{
Cipher c = Cipher.getInstance( "DES" );
Key k = new SecretKeySpec( pass.getBytes(), "DES" );
c.init( Cipher.DECRYPT_MODE, k );
ByteArrayOutputStream bos = new ByteArrayOutputStream();
CipherInputStream cis = new CipherInputStream( is, c );
//########################################################################
// Ursprüngliches Beispiel
//########################################################################
// for ( int b; (b = cis.read()) != –1;)
// bos.write( b );
//
//########################################################################
// Meine Änderung der FOR-Schleife.......
//########################################################################
int b;
do
{
b = cis.read();
bos.write( b );
}
while(b != -1);
//########################################################################
cis.close();
return bos.toByteArray();
}
Alles anzeigen