17. januar 2003 - 09:53Der er
47 kommentarer og 2 løsninger
Krypteringsmetoder - MD5?
Jeg har aldrig arbejdet med kryptering før, men jeg kunne godt tænke mig at kryptere nogle tekststrenge. Hvordan kunne jeg fx. gøre dette, og hvad kræver det af import?
men der skal jo også bruges en dekrypteringsmetode på klient siden... hvordan ser sådan een ud og er overstående overhovedet brugelig, og hvilke pakker skal man importer?
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
Okey! Har JDK 1.4. Men hvordan kunne en krypterings- og dekrypteringsmetode så se ud? og bør man bruge MD5 eller findes der andre kryperingsalgoritmer man kan komme til?
Her er et eksempel på symmetrisk kryptering, hvor der kræves en hemmelig kode, der er ens til både kryptering og dekryptering. public class DESEncrypter { private Cipher ecipher; private Cipher dcipher; byte[] salt = { (byte)0xA9, (byte)0x9B, (byte)0xC8, (byte)0x32, (byte)0x56, (byte)0x35, (byte)0xE3, (byte)0x03 }; int iterationCount = 19; DESEncrypter(String passPhrase) { try { // Create the key 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());
Jeg får desværre en: C:\Documents and Settings\Torben Pedersen\Dokumenter\DØK\2.År\Datalogi\Java\encrypt\Encrypt.java:2: cannot resolve symbol symbol : class Cipher location: package crypto import javax.crypto.Cipher;
Den er ikke helt tilfreds med Cipher. Burde den ikke lige standard i j2sdk1.4.0_01? What to do?
Mit classpath ser således ud nu...: .;%SystemRoot%\java\classes;%SystemRoot%\java\classes\swing.jar;%SystemRoot%\j2sdk1.4.0_01\jre\lib\jce.jar Men den kommer med samme fejl :o( Jeg har tjekket at jce.jar ligger der. Jeg forstår det ikke... :o(
Er der i øvrigt nogen der har en fornuftig implementering af Rijndael i Java? Med fuld key support 128/192/256. Den er ikke endnu en del af JCE og de implementeringer jeg har kunnet finde var til cryptix. Nogen der har en standalone version?
#Cipher #Algorithm # #The following names can be specified as the algorithm component in a #transformation when requesting an instance of Cipher: # #* AES: Advanced Encryption Standard as specified by NIST in a draft FIPS. #Based on the Rijndael algorithm by Joan Daemen and Vincent Rijmen, AES is a #128-bit block cipher supporting keys of 128, 192, and 256 bits.
Siger du at de har reserveret navnet i interfacet men ikke implementeret det ?
Men efter jeg downloadede: http://polydistortion.net/bc/download/bcprov-jdk14-117.jar og tilføjede den i classpath og tilføjede: Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); i koden, så gik det meget bedre !
public SecretKeySpec(byte[] key, String algorithm)
Constructs a secret key from the given byte array.
This constructor does not check if the given bytes indeed specify a secret key of the specified algorithm. For example, if the algorithm is DES, this constructor does not check if key is 8 bytes long, and also does not check for weak or semi-weak keys. In order for those checks to be performed, an algorithm-specific key specification class (in this case: DESKeySpec) should be used.
som jeg læser det, så er det din opgave at kalde med en key af korrekt længde.
Men der er også andre måder at generere keys på. Det her er bare den det kræver mindst indtastning.
Det viser sig dog at noget går galt når større mængder tekst krypteres... dekrypteringen er næppe rigtig:
Ren tekst: This constructor does not check if the given bytes indeed specify a secret key of the specified algorithm. For example, if the algorithm is DES, this constructor does not check if key is 8 bytes long, and also does not check for weak or semi-weak keys. In order for those checks to be performed, an algorithm-specific key specification class (in this case: DESKeySpec) should be used.
Dekrypteret: This constructor does not check 9ôó{! Tñ,¯es indeed specify a secret key of the specified algorithm. For e‰ óÓ»šuÞíC �ÒIÚlgorithm is DES, this constructoμM«SEûf^{ʦ‘Õ if key is 8 bytɈw ¶$<îºî,I•o does not check›—6Ð@nËõû¦„׃Û)i-weak keys. In order for those checks to be performed, an algorithm-specific key specification çÔ+)&jã5·^ase: DESKeySpec) should be used.
Den ødelagte tekst kommer i blokke efterfulgt af ren tekst.. jeg ser ingen mening i det.
private final String ENCRYPTION_START = "---------- BEGIN ENCRYPTED MESSAGE ----------\n"; private final String ENCRYPTION_END = "---------- END ENCRYPTED MESSAGE ----------";
public AESFrame() {
setTitle("AES Kryptering"); aes = new AESEncrypt();
setSize(500,500);
GridBagConstraints con; layout = new GridBagLayout();
getContentPane().setLayout(layout);
Insets space = new Insets(5,5,5,5);
JPanel inputPanel = new JPanel(new BorderLayout()); inputLabel = new JLabel("Input område"); inputText = new JTextArea(); inputText.setLineWrap(true); inputText.setWrapStyleWord(true); inputText.setBorder(BorderFactory.createEmptyBorder(2,2,2,2)); inputDocument = inputText.getDocument(); inputDocument.addDocumentListener(new DocumentListener() { public void changedUpdate(DocumentEvent e ) { if (e.getDocument()== inputDocument) disableIfEmpty(inputDocument); }
public void insertUpdate( DocumentEvent e ){ if (e.getDocument()==inputDocument) disableIfEmpty(inputDocument); }
public void removeUpdate( DocumentEvent e ){ if (e.getDocument()==inputDocument) disableIfEmpty(inputDocument); }
JPanel buttonPanel = new JPanel(); encrypt = new JButton("Krypter"); encrypt.addActionListener(this); decrypt = new JButton("Dekrypter"); decrypt.addActionListener(this); reset = new JButton("Reset"); reset.addActionListener(this); copyToClipBoard = new JButton("Kopiér"); copyToClipBoard.addActionListener(this); pasteFromClipBoard = new JButton("Sæt ind"); pasteFromClipBoard.addActionListener(this); encrypt.setEnabled(false); decrypt.setEnabled(false); copyToClipBoard.setEnabled(false);
encrypt.setToolTipText("Krypterer teksten i inputfeltet"); decrypt.setToolTipText("Dekrypterer teksten i inputfeltet"); reset.setToolTipText("Nulstiller alle felter"); copyToClipBoard.setToolTipText("Kopierer ouputfeltets tekst til udklipsholderen"); pasteFromClipBoard.setToolTipText("Sætter udklipsholderens data ind i inputfeltet");
No prob vith :) Måske jeg kan bruge det hvis jeg nogensinde får den til at ville compile....! Når jeg prøver med Arnes: java -classpath %SystemRoot%\j2sdk1.4.0_01\jre\lib\jce.jar Encrypt.java får jeg følgende fejl: "Registry key 'Software\JavaSoft\Java Runtime Environment\CurrentVersion has value 1.3, but 1.4 is required. Error: could not find java.dll Error: could not find Java 2 Runtime Environment." Kan ikke forstå den brokker sig over at det ikke er 1.4. What dælen do i do?
Jeg har nu afinstalleret J2SE v 1.4.0_01 og installeret J2SE v 1.4.1_01 (og desuden også installeret Java(TM) 2 Platform, Enterprise Edition 1.4 Beta)
Men jeg får desværre stadig en fejl (heldigvis en ny een:o) "package org.bouncycastle.jce.provider does not exist Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());"
Hvad kan denne fejl skyldes?
(Jeg har tilrettet min classpath)
Det er vist ved at være point tid til point til jer...
Har fundet ud af fejlen, og du havde ret arne, det var min Classpath. Jeg troede at %systemroot% betød c: men det er åbenbart c:\windows Mange tak for al den ekstra hjælp :o) Nu funker min j2ee også :o)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.