Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Verschlüsseln von Daten mit Passwort

5 views
Skip to first unread message

Matze Imhof

unread,
Mar 2, 2006, 8:52:47 AM3/2/06
to
hi,

ich will einen String mit einem passwort verschlüsseln und später mit
diesem passwort wieder entschlüsseln. man sollte meinen, so was gibt's
schon in hülle und fülle. aber bisher hab ich nix einfaches gefunden
... :-(

public byte[] encrypt(String text, char[] password);
public String decrypt(byte[] encryptedText, char[] password);

sowas würde mir ja schon reichen.

danke + gruß
matze

Sascha Broich

unread,
Mar 2, 2006, 9:24:13 AM3/2/06
to
On 2 Mar 2006 05:52:47 -0800, Matze Imhof wrote:

> hi,
>
> ich will einen String mit einem passwort verschlüsseln und später mit
> diesem passwort wieder entschlüsseln. man sollte meinen, so was gibt's
> schon in hülle und fülle. aber bisher hab ich nix einfaches gefunden
> ... :-(
>
> public byte[] encrypt(String text, char[] password);
> public String decrypt(byte[] encryptedText, char[] password);
>

Ich habe mir da zwei Funktionen selbst gebaut:

public static byte[] DES(byte[] key, byte[] value, boolean encrypt)
{
try
{
Cipher cipher = Cipher.getInstance("DES");
SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");
SecretKey secretKey = skf.generateSecret(new DESKeySpec(key));
if (encrypt) cipher.init(Cipher.ENCRYPT_MODE, secretKey);
else cipher.init(Cipher.DECRYPT_MODE, secretKey);

return cipher.doFinal(value);
}
catch (Exception e)
{
System.err.println(e);
}
return null;
}

public static String DES(String key, String value, boolean encrypt)
{
try
{
return new String(DES(key.getBytes(UTF_8),value.getBytes(UTF_8),encrypt),UTF_8);
}
catch(UnsupportedEncodingException ex)
{
return null;
}
}


Sascha Broich
--
Wer den Teufel an die Wand malt, spart Tapete.

Stefan Matthias Aust

unread,
Mar 2, 2006, 2:04:37 PM3/2/06
to
Matze Imhof schrieb:

> ich will einen String mit einem passwort verschlüsseln und später mit
> diesem passwort wieder entschlüsseln. man sollte meinen, so was gibt's
> schon in hülle und fülle.

Stichworte sind Java Crypto Architecture bzw. API und PBE (password
based encryption). Hilfe einer java.crypto.spec.PBEKeySpec kannst du
einen geheimen Schlüssel definieren, den du dann einem
java.crypto.Cipher mit dem Algorithmus deiner Wahl, z.B.
"PBEWithSHA1AndDESede", initialisierst, auf das du dann den Cipher
benutzt, um deinen Text zu ver- bzw. zu entschlüsseln.

Hier ->
http://java.sun.com/j2se/1.5.0/docs/guide/security/jce/JCERefGuide.html
findest du Beispiele.

Stefan

Matze Imhof

unread,
Mar 6, 2006, 4:43:30 AM3/6/06
to
hi sascha,

danke für den beispielcode.
ich bekomm da aber noch eine exception:
java.security.NoSuchAlgorithmException: Cannot find any provider
supporting DES

da brauch ich wohl noch einen provider, gibt's da auch freie anbieter ?
welchen benutzt du ?

gruß
matze

Stefan Matthias Aust

unread,
Mar 6, 2006, 6:03:17 AM3/6/06
to
> java.security.NoSuchAlgorithmException: Cannot find any provider
supporting DES

DES ist standardmäßig in Suns Java enthalten. Was für eine
Java-Version hast du. Unter
http://java.sun.com/j2se/1.5.0/docs/guide/security/jce/JCERefGuide.html#AppA
kannst du nachschauen, welche Algorithmen standardmäßig vorhanden
sind.

Stefan

Stefan Matthias Aust

unread,
Mar 6, 2006, 6:04:22 AM3/6/06
to
PS: DES pur ist eine schlechte Wahl. Für Passworte sind
passwort-basierte (PBE)-Algorithmen die bessere Wahl.

Stefan

Matze Imhof

unread,
Mar 6, 2006, 6:59:32 AM3/6/06
to
hab gerade ein bisschen gestöbert:
es liegt wohl an meiner ide (eclipse 3.2)
--> siehe
http://groups.google.de/group/comp.lang.java.help/browse_frm/thread/154c3729c2882c41/df22b4902e02353d?tvc=1&q=javax.crypto+NoSuchAlgorithmException&hl=de#df22b4902e02353d

über commandline geht's ...
bleibt nur noch die frage, wie krieg ich's hin, dass eclipse dieses
verhalten ablegt.
die checkbox 'Use system libraries' gibt's im 3.2 nicht mehr ...
mist !

Sascha Broich

unread,
Mar 6, 2006, 7:27:34 AM3/6/06
to

Ich nutze den Code auch mit Eclipse 3.2. Das allein kanns nicht sein.


Sascha Broich
--
Heute verlierst du.
Morgen gewinnen die Anderen.

Matze Imhof

unread,
Mar 6, 2006, 7:41:56 AM3/6/06
to
ich binde die jre (1.5.0_01) explizit in den launch ein.
vielleicht ist es das ?
das muss aber sein, denn ich benutze zwei verschiedene jre

oder liegt es vielleicht an der jre-version - aber dann dürfte es
über commandline auch nicht gehen ..oder ?

gruß
matze

ps: nette sprüche übrigens :-)

Wanja Gayk

unread,
Mar 6, 2006, 7:58:56 AM3/6/06
to
matze...@web.de said...

> ich binde die jre (1.5.0_01) explizit in den launch ein.
> vielleicht ist es das ?
> das muss aber sein, denn ich benutze zwei verschiedene jre
>
> oder liegt es vielleicht an der jre-version - aber dann dürfte es
> über commandline auch nicht gehen ..oder ?

Möglicherweise musst du noch die jce.jar aus dem /lib Verzeichnis der
JRE extra einbinden.

Gruß,
-Wanja-

--
"Gewisse Schriftsteller sagen von ihren Werken immer: 'Mein Buch, mein
Kommentar, meine Geschichte'. [..] Es wäre besser, wenn sie sagten:
'unser Buch, unser Kommentar, unsere Geschichte'; wenn man bedenkt, dass
das Gute darin mehr von anderen ist als von ihnen." [Blaise Pascal]

Matze Imhof

unread,
Mar 6, 2006, 8:16:50 AM3/6/06
to
hm, eher nicht. die exception sieht so aus:

java.security.NoSuchAlgorithmException: Cannot find any provider
supporting DES
at javax.crypto.Cipher.getInstance(DashoA12275)
...

heißt also, dass das jce.jar eingebunden ist, nicht aber
sunjce_provider.jar
aber miteinbinden bringt irgendwie auch nichts, weder von noch nach dem
jre.

Wanja Gayk

unread,
Mar 6, 2006, 8:41:33 AM3/6/06
to
matze...@web.de said...

Vielleicht hilft dir das hier weiter, ist zwar Blowfish, statt DES, aber
das Beispiel funktioniert bei mir:

public class PMTextCrypter {

private static final String ALGORITHM = "Blowfish";
SecretKey skey;

public PMTextCrypter(){
try{
System.out.println("Generating Key");
final KeyGenerator kgen = KeyGenerator.getInstance(ALGORITHM);
skey = kgen.generateKey();
System.out.println("Key generated");
}
catch(Exception e){
e.printStackTrace();
}
}

public String encrypt(final String uncrypted, final String password){
try{
final byte[] raw = skey.getEncoded();
final SecretKeySpec skeySpec = new SecretKeySpec(raw, ALGORITHM);
final Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
final byte[] encrypted = cipher.doFinal(uncrypted.getBytes());
return new String(encrypted);
}
catch(Exception e){
e.printStackTrace();
return null;
}
}

public String decrypt(final String encrypted, final String password){
try{
final byte[] raw = skey.getEncoded();
final SecretKeySpec skeySpec = new SecretKeySpec(raw, ALGORITHM);
final Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
final byte[] decrypted = cipher.doFinal(encrypted.getBytes());
return new String(decrypted);
}
catch(Exception e){
e.printStackTrace();
return null;
}
}

public static void main(final String[] args){
final PMTextCrypter crypter = new PMTextCrypter();
final String pwd = "jackass1";
final String original = "Hello World";
System.out.println(original);
final String encrypted = crypter.encrypt(original, pwd);
System.out.println(encrypted);
final String decrypted = crypter.decrypt(encrypted, pwd);
System.out.println(decrypted);
}
}

(ja, ich weiß: String statt byte[] ist böse)

Matze Imhof

unread,
Mar 6, 2006, 8:56:39 AM3/6/06
to
hi wanja,

danke für dein beispiel, leider bleibt das problem bei mir:

java.security.NoSuchAlgorithmException: Blowfish KeyGenerator not
available
at javax.crypto.KeyGenerator.<init>(DashoA12275)
at javax.crypto.KeyGenerator.getInstance(DashoA12275)
...

irgendwas muss wohl an meinem eclipse nicht passen ..
danke trotzdem :-)

gruß
matze

Sascha Broich

unread,
Mar 6, 2006, 9:00:41 AM3/6/06
to
On 6 Mar 2006 04:41:56 -0800, Matze Imhof wrote:

> ich binde die jre (1.5.0_01) explizit in den launch ein.
> vielleicht ist es das ?

Du kannst doch bei Eclipse diverse JREs definieren und dann das
entsprechende JRE für Run auswählen. Dann sollten auch die diversen
System-Jars mit dabei sein.


> ps: nette sprüche übrigens :-)

Siehe unten ;-)


Sascha Broich
--
Ich bin niedlich, ich darf das. (Sam & Max)

Matze Imhof

unread,
Mar 6, 2006, 9:12:40 AM3/6/06
to
sind sie nur leider nicht.
auch wenn ich sie explizit dazu nehme haben sie keine wirkung ...

vielleicht ein bug im eclipse 3.2 ? ach nee, du nutzt das ja auch ...

Sascha Broich

unread,
Mar 6, 2006, 10:23:31 AM3/6/06
to
On 6 Mar 2006 06:12:40 -0800, Matze Imhof wrote:

> sind sie nur leider nicht.
> auch wenn ich sie explizit dazu nehme haben sie keine wirkung ...

Örks, das klingt ja sehr merkwürdig.

Schaun mer mal, was die Konfiguration bei mir sagt:
(Ich habe nur ein JDK und ein JRE definiert, beides die 1.5.0_06)

Run->Run...->Configuration gewählt->JRE->Project JRE

Window->Preferences->"jre"->JDK gewählt->Edit->JRE System libraries:
(Jeweils der Pfad "D:\programme\java\jdk1.5.0\jre\lib\" vornedran)

rt.jar
jsse.jar
jce.jar
charsets.jar
ext\sunjce_provider.jar

(jmf,java3d,...)


Schau doch mal bei dir nach, ob das alles da ist.

Ansonsten würde ich auf defektes/schlecht übernommenes Projekt tippen.
Das hatte ich mal, als ich eine neue Eclipse-Version einfach drüberkopiert
hatte.

Matze Imhof

unread,
Mar 7, 2006, 3:47:31 AM3/7/06
to
ich mein altes eclipse (3.2M3) nun weggeschmissen und ein neues
eingerichtet (3.2M5)
und nun geht alles ... muss wohl dadrin was kaputt gewesen sein.

danke für eure hilfe !
jetzt kann ich mich endlich mit dem jce auseinandersetzen :-)

0 new messages