[ sedeblyzer @ 29.05.2011. 14:14 ] @
Trenutno sam u izradi neke aplikacije koja mi treba za ispit, i jedan dio nje treba da se bavi kriptografijom. Nikad prije se nisam sretao sa tim, svaka pomoc bi mi dobro dosla. Naime potrebno je da podatke koji se nalaze u bazi prikazem u kriptovanoj formi, ali da je u pitanju povratni algoritam, kako bi kasnije mogao te podatke da desifrujem i ponovo po potrebi prikazem u originlanoj formi. Koristim javu, pokusao sam da nadjem ovdje nesto vezano za to ali nisam naisao na nesto konkretno, nasao sam MD5 funkciju ali ona je jednosmjerna ako sam dobro shvatio. Isto tako postoji i jedna tabela u kojoj bi mogao da koristim ovaj pristup preko MD5 funkcije ali ne mogu da nadjem nacin da je implemntiram za vise od jedne kolone, na forumu vezanom za SQL sam nasao njenu implementaciju za tabelu koja ima samo PK i jos jednu kolonu, zanima me moze li se ona implementriati za n broj kolona u jednoj tabeli ili je za to potrebna neka druga funkcija?
Hvala svima.
[ biske86 @ 29.05.2011. 16:41 ] @
Kriptografija je sama po sebi dosta obimna oblast i nije uopšte laka za razumevanje. Međutim neke osnovne stvari možeš da pohvataš iz tutorijala.
Uglavnom kriptografija se bavi problemima kao što su: privatnost (što znači da niko ne može da vidi tvoju poruku), integritet podataka (znači da ako naručimo 1 laptop preko interneta da ne prepravi neko podatke pa da ispadne da smo naručili 5 laptopa), autentifikacija (da možemo da potvrdimo svoj identitet).
E sad ima tu dosta algoritama koji imaju različite uloge. Na primer ovaj md5 služi da se uverimo da se poruka nije promenila. Na primer imaš neki fajl koji treba da skineš sa servera i onda se tu odradi md5 od tog fajla. Dobija se tekst sa 32 karaktera i kad skidaš recimo neki film ti skineš i md5 od tog filma. Onda kad skineš film uradiš ponovo md5 i uporediš sa md5 fajlom koji si skinuo sa servera. Ako se slažu nije došlo do oštećenja fajla u suprotnom jeste. Popularan je još algoritam SHA (ima više verzija). Poznati simetrični algoritmi su RSA i DSA.

Uglavnom za sve ovo imaš podršku u Javi pa kreni.

Na primer imaš na sajtu orakla, pa pogledaj:
http://download.oracle.com/jav...guide/security/CryptoSpec.html
[ sedeblyzer @ 29.05.2011. 17:19 ] @
Jednu stvar sam zaboravio da pomenem, to je da koristim MSSQL bazu.
[ biske86 @ 29.05.2011. 18:09 ] @
Mislim da nisi dobro definisao zadatak. Moraš malo konkretnije.

Iz postavke zadatka se jasno vidi da ti treba asimetrični algoritam, kao što sam napomenuo to su DSA i RSA. Pogledaj u onom linku koji sam ti poslao. Kreni pa reci gde si zapeo, gde je problem..
[ sedeblyzer @ 31.05.2011. 09:09 ] @
Ovo je kod algoritma koji sam naso na netu, i on radi, medjutim ako kao parametar proslijedim text iz text boxa, onda se ne obavi kriptovanje, ne mogu da skontam u cemu je fora, ispod ovoga koda je i kod kako prosledjujem parametre, ako neko vidi nesto sto ja ne vidim, bio mi bu zahvalan.
Code:


package kriptovanje;

import java.security.spec.AlgorithmParameterSpec;
import java.security.spec.KeySpec;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;

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

public class DESAlg 
{
  Cipher ecipher;

  Cipher dcipher;

  byte[] salt = { (byte) 0xA9, (byte) 0x9B, (byte) 0xC8, (byte) 0x32, (byte) 0x56, (byte) 0x35,
      (byte) 0xE3, (byte) 0x03 };

  public DESAlg(String passPhrase)
  {
      try
      {
          int iterationCount = 2;
          KeySpec keySpec = new PBEKeySpec(passPhrase.toCharArray(), salt, iterationCount);
          SecretKey key = SecretKeyFactory.getInstance("PBEWithMD5AndDES").generateSecret(keySpec);
          ecipher = Cipher.getInstance(key.getAlgorithm());
          dcipher = Cipher.getInstance(key.getAlgorithm());

          AlgorithmParameterSpec paramSpec = new PBEParameterSpec(salt, iterationCount);

          ecipher.init(Cipher.ENCRYPT_MODE, key, paramSpec);
          dcipher.init(Cipher.DECRYPT_MODE, key, paramSpec);
      }
      catch(Exception e)
      {
          e.printStackTrace();
      }
  }

  public String encrypt(String str) 
  {
      try
      {
          new BASE64Encoder().encode(ecipher.doFinal(str.getBytes()));
      }
      catch(Exception e)
      {
          e.printStackTrace();
      }
      return str;
  }

  public String decrypt(String str) 
  {
      try
      {
          new String(dcipher.doFinal(new BASE64Decoder().decodeBuffer(str)));
      }
      catch(Exception e)
      {
          e.printStackTrace();
      }
    return str;
  }
}


Code:

String s1 = encrypter.encrypt("'" + imeTextField.getText() + "'");
[ bantu @ 31.05.2011. 10:09 ] @
Vidim ja.

Čemu ti služi ovo "'" ne kriptuješ valjda i apostrofe?
[ sanchi @ 31.05.2011. 10:29 ] @
Ako se ne varam, ni u encrypt ni u decrypt ti se ne menja input str, moras rezultat prebaciti u drugu varijablu.
Probaj sa ovim:
Code:

   public String encrypt(String str) {
        String res = null;
        try {
            res = new BASE64Encoder().encode(ecipher.doFinal(str.getBytes()));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return res;
    }

    public String decrypt(String str) {
        String res = null;
        try {
            res = new String(dcipher.doFinal(new BASE64Decoder().decodeBuffer(str)));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return res;
    }
[ nemnesic @ 31.05.2011. 13:32 ] @
pogledaj ovo: http://commons.apache.org/codec/api-release/index.html
[ sedeblyzer @ 31.05.2011. 14:09 ] @
@sanchi
Bila si upravu, sad radi sve sto treba.

@bantu
I ti si bio upravu:)

Sad za sad sam rjesio problem, mogu dalje, hvala svima.