[java]Encrypt/decrypt adhv passphrase

Pagina: 1
Acties:
  • 92 views sinds 30-01-2008

  • bibawa
  • Registratie: Augustus 2005
  • Laatst online: 13-04-2008
Ik zou bepaalde gegevens moeten kunnen encrypten en op een later tijdstip ook terug moeten decrypten in Java.

Dit zou ik willen doen adhv een "passphrase". Op google vind ik hier vanalles over maar niet echt iets bruikbaar of mooie voorbeeldcode.

Kent iemand een goed site waar goede voorbeeldcode hierover te vinden is. Ik vind wel het encrypten van passwoorden maar het decrypten dan weer niet meer (1-way encryption :s)

  • Soultaker
  • Registratie: September 2000
  • Nu online
JCE?

  • bibawa
  • Registratie: Augustus 2005
  • Laatst online: 13-04-2008
Daar heb ik al heel lang in zitten zoekekn maar ik vind daar niets bruikbaar in, waarschijnllijk omdat ik niet goed zoek.. Ik ben vooral op zoek naar voorbeeldcode en niets anders :s

  • danslo
  • Registratie: Januari 2003
  • Laatst online: 23:13
Xor?

  • Soultaker
  • Registratie: September 2000
  • Nu online
bibawa schreef op zondag 20 mei 2007 @ 18:48:
Daar heb ik al heel lang in zitten zoekekn maar ik vind daar niets bruikbaar in, waarschijnllijk omdat ik niet goed zoek.. Ik ben vooral op zoek naar voorbeeldcode en niets anders :s
Ok, dan type je jce example in Google in.

Ik weet niet wat jouw voorstelling van dit forum is, maar als je weigert zelf onderzoek te doen is je topic snel op slot.

Verwijderd

Zoals altijd met security is de hamvraag: waartegen wil je beveiligd zijn?

Het implementeren van betrouwbare encryptie is voor een leek op dat gebied verspilde moeite. Een cryptoanalist zal iedere hobby-implementatie in principe binnen een dag omzeep helpen. In jouw positie zou ik een van de openbaar beschikbare implementaties gebruiken (libtomcrypt etc). Tenzij de security alleen "voor de vorm" is (tegen irritante buurjongetjes zeg maar), dan kun je ook zelf wel wat in elkaar frutselen, bijvoorbeeld:

- gebruik passphrase als seed voor een functie die een "random" stream genereert
- XOR deze stream met de data

Als je echt daadwerkelijk zelf wilt gaan proberen betrouwbare encryptie te implementeren zou ik eerste dit boek gaan lezen, ik hoop dat je wiskunde een beetje op peil is ;)

edit: de bovengenoemde JCE lijkt me inderdaad het makkelijkst, ik zie dat je daarmee ook kan encrypten op basis van een password, precies wat je wilt dus.

[ Voor 26% gewijzigd door Verwijderd op 20-05-2007 19:09 ]


  • bibawa
  • Registratie: Augustus 2005
  • Laatst online: 13-04-2008
De encryptie moet niet zwaar zijn het is om de settings voor een database verbinding te encrypten maar ik moet ze natuurllijk ook kunnen decrypten, ik heb volgende code gevonden:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

/**
 * @author Jeff Genender
 **/
public class EncryptionUtils {
  private static final byte[] _3desData = {
    (byte)0x76, (byte)0x6F, (byte)0xBA, (byte)0x39, (byte)0x31, (byte)0x2F,
    (byte)0x0D, (byte)0x4A, (byte)0xA3, (byte)0x90, (byte)0x55, (byte)0xFE,
    (byte)0x55, (byte)0x65, (byte)0x61, (byte)0x13, (byte)0x34, (byte)0x82,
    (byte)0x12, (byte)0x17, (byte)0xAC, (byte)0x77, (byte)0x39, (byte)0x19 };

  private static SecretKeySpec _key = new SecretKeySpec(_3desData, "DESede");

  public static String encrypt(String text){
    byte[] plaintext = text.getBytes();

    try{
      // Get a 3DES Cipher object
      Cipher cipher = Cipher.getInstance("DESede");  // Triple-DES encryption
      // Set it into encryption mode
      cipher.init(Cipher.ENCRYPT_MODE, _key);

      // Encrypt data
      byte[] cipherText = cipher.doFinal(plaintext);
      BASE64Encoder b64 = new BASE64Encoder();
      return b64.encode(cipherText);
    }catch (Exception e){
      throw new java.lang.RuntimeException(e);
    }
  }

  public static String decrypt(String text){

    try{

      BASE64Decoder b64 = new BASE64Decoder();
      byte[] cipherText = b64.decodeBuffer(text);

      // Get a 3DES Cipher object
      Cipher cipher = Cipher.getInstance("DESede");  // Triple-DES encryption
      // Set it into decryption mode
      cipher.init(Cipher.DECRYPT_MODE, _key);

      // Decrypt data
      String plainText = new String(cipher.doFinal(cipherText));

      return plainText;

    }catch (Exception e){
      throw new java.lang.RuntimeException(e);
    }
  }
}


Nu als ik dat compileer geeft hij warnings op de B64Decoders / encoders omdat die bij volgende java releases weg zullen gaan.

Dus dacht ik laat ik dat stuk code eruit laten en het allemaal zonder dat doen, maar niet dus, dan krijg ik dus gewoon errors :/
Nu wat is de vervanging van die B64Decoders en hoe pas ik dat toe op deze code?

  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
En heb je niets aan de classes in de javax.crypto namespace? Volgens mij moet je met de CipherInputStream en CipherOutputStream al een heel eind kunnen komen...

(Zie http://java.sun.com/j2se/1.5.0/docs/api/)

  • bibawa
  • Registratie: Augustus 2005
  • Laatst online: 13-04-2008
Ik wiil die code ook nog gaan gebruiken voor wachtwoord encryptie

  • MetroidPrime
  • Registratie: Oktober 2003
  • Laatst online: 01-11 10:08

MetroidPrime

Turn it up loud, captain!

bibawa schreef op zondag 20 mei 2007 @ 19:12:
Nu als ik dat compileer geeft hij warnings op de B64Decoders / encoders omdat die bij volgende java releases weg zullen gaan.

Dus dacht ik laat ik dat stuk code eruit laten en het allemaal zonder dat doen, maar niet dus, dan krijg ik dus gewoon errors :/
Nu wat is de vervanging van die B64Decoders en hoe pas ik dat toe op deze code?
Alle packages die beginnen met sun, maken geen deel uit van standaard Java. Er zijn daarom(bij mijn weten) ook geen vervangers voor die twee classes, omdat ze officieel nooit deel uit hebben gemaakt van Java. Er zijn waarschijnlijk wel een aantal open-source alternatieven te vinden op het internet.

Volgens mij zit je je alleen op het verkeerde punt blind te staren. In plaats van dat je uitzoekt hoe je wel gebruik moet maken, probeer je code van iemand anders werkend te krijgen die waarschijnlijk niet eens doet wat je wilt. Ik krijg ook niet de indruk dat jij het hele base-64 verhaal ook daadwerkelijk nodig zult hebben.

JCE is inderdaad het juiste startpunt voor wat jij wilt. Je kan dan het beste gaan zoeken naar voorbeelden va JCE die gebruik maken van PBE(Password Based Encryption). Je kunt het beste hier beginnen met zoeken.

"Some girl on the street outside the bar just asked me if I was saved yet." "Yeah? What did you say?" "I told her 'I saved at the checkpoint a couple of minutes back and I can reload from there if I die.'


  • joho
  • Registratie: Januari 2000
  • Laatst online: 14-04 22:42

joho

 

Wachtwoord encryptie is eigenlijk altijd 1-way.
Mischien zie je over het hoofd dat je niet 'terug' hoeft (de decryptie).
Aanmaken wachtwoord -> favoriete 1-way encryptie -> rommel,
en voor het checken van het wachtwoord hetzelfde liedje.
Inloggen wachtwoord -> favoriete 1-way encryptie -> rommel,
dan moet alleen even gechecked worden of de rommel weer hetzelfde is.

  • bibawa
  • Registratie: Augustus 2005
  • Laatst online: 13-04-2008
ja idd maar ik moet het dus ook kunnen gebruiken om DB parameters te kunnen uitlezen / opslaan..

Ik heb het artikel gelezen over de PBE, en ik heb iets gemaakt dat aardig goed werkt, het decrypten / encrypten gaat goed alleen als ik System.out.println(algParams.getEncoded().toString());

doe (wat dus een leesbare string zou m oeten zijn) dan krijg ik [B@503429 als resultaat terug, hoe kan ik dat nu dus omzetten naar iets leesbaar :s

  • bibawa
  • Registratie: Augustus 2005
  • Laatst online: 13-04-2008
Ik heb jasypt even geprobeert maar dat gaf ook errors no class found exception :/

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

De "[B" is gewoonlijk de string representatie van een byte array. Zodra je eenmaal hebt uitgezocht hoe je een byte array kunt converteren naar een humaan leesbare String, dan ben je er.

Hint: check de java.lang.String API.

[ Voor 9% gewijzigd door BalusC op 20-05-2007 21:34 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Het is hier in PRG, zoals je vaker verteld is, niet de bedoeling dat we je aan je handje vasthouden. Als je ergens code 'leent' van het web en die werkt niet dan kun je voor support terecht bij de makers. Als je er in het wilde weg in gaat snijden (B64Decoders eruit slopen) en bidden dat het werkt dan ben je niet aan het programmeren maar aan het <vul maar iets in>.

Programmeren is zélf denken, zélf doen en zélf debuggen. Als je er dan niet uit komt ben je hier van harte welkom, maar op deze manier ("blabla geeft ook errors") ben je hier aan het verkeerde adres. Neem dan op z'n minst de moeite om de errors en/of compiler warnings te interpreteren en zelf te proberen op te lossen. Telkens roepen "dit en dat doet het niet" werkt hier niet. Verdiep je gerust in de materie voordat je er mee aan de slag gaat.

Tot slot wat relevante links (geen zin meer om hier nog een heel verhaal omheen te maken, je bent er vaak genoeg op gewezen):
scriptrequest / quickfix
Debuggen: Hoe doe ik dat?
Programming Beleid Quickstart

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1

Dit topic is gesloten.