Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  21 4157
Hei. Jeg er ganske så ny i programmering men tenkte jeg skulle lage et krypterings program og sette for eksempel:

Kode

a = "dddd"
sånn at hvits jeg skriver inn (andre så blir det ddddndre når den kommer tilbake) noen som kan hjelpe meg her ?
Søk opp string replace.
les denne: http://freak.no/forum/showthread.php?t=261090 mange av forslagene er ikke python-spesifikke men kan omsettes til andre programmeringsspråk
Hmm vet ikke helt tanker på og gjøre noe på denne måten
for eksempel

Kode

String input;
String a = "er324g";
input = JOptionPane.showInputdialog("Skriv inn tekst her:")
JOptionPane.showmessagedialog(input)
men hvordan skal det gjøres riktig ?
det som skal skje er at han skal se hva personen skriver og gjøre den om til det hver og en bokstav er satt som

Sitat av moridin Vis innlegg
les denne: http://freak.no/forum/showthread.php?t=261090 mange av forslagene er ikke python-spesifikke men kan omsettes til andre programmeringsspråk
Vis hele sitatet...
Fikk ikke det til med ting som var derifra kjønte ikke det helt
Sist endret av Broder Safari; 27. november 2013 kl. 17:48.
Hmmm... skal du generere randome tall for hver bokstav eller?
Nei skal sette foreksempel a til 13gegt og sette b til 124kger foreksempel
noe sånt ca. (pseudokodeish)

Kode

private string letters = "abcdefghijklmnopqrstuvwxyzæøå";
private string[] cipher = {"byttMedA", "byttMedB".... };

public string Encrypt(string plainText)
{
	StringBuilder encrypter = new StringBuilder();
	for(int i = 0; i <= plainText.length; i++)
	{
		int alphabetIndex = alphabet.indexOf(plaintext[i]);
		encrypter.append(cipher[alphabetIndex]);
	}
        return encrypter.toString();

}
Sist endret av lor3ntz; 27. november 2013 kl. 18:22.
Dette kan gjøres smellenkelt med string replace. feks:

Kode

import javax.swing.*;
public class krypto{
	public static void main(String[] args){
		String input = JOptionPane.showInputDialog("Hva vil du kryptere");
		String output = input.replace("a", "dddd");
       JOptionPane.showMessageDialog(null, output);
	}
}
Sist endret av moret; 27. november 2013 kl. 18:42.
Sitat av Broder Safari Vis innlegg
Hei. Jeg er ganske så ny i programmering men tenkte jeg skulle lage et krypterings program og sette for eksempel:

Kode

a = "dddd"
sånn at hvits jeg skriver inn (andre så blir det ddddndre når den kommer tilbake) noen som kan hjelpe meg her ?
Vis hele sitatet...
Dette kan man vel egentlig ikkje kalle kryptering, siden knekketiden på en slik algorithme er nesten lik null, men denne formen for kryptografi har blitt brukt i mange hundre muligens tusen år før datamaskinens eksistens. Selve prinsippet og historien bak den kan du lese mer om her:

Wikipedia - Substitution cipher

Ved et raskt google søk på Google - Substitution cipher java

Så finnes disse linkene øverst på siden som både innholder eksempler og forklaringer.

Dreamincode.net - substitution cipher

bipinrupadiya.com - mono alphabetic substitution cipher

Dreamincode.net - How to use a substitution cipher to encode and decode a message

Det er flere kjente algorithmer i dag som benytter seg av samme prinsippet som du ønsker å bruke, der i blant AES bruker en såkalt lookup table, dette er ikkje helt det samme men bygger på samme prinsippet om å bytte ut en verdi med en annen. Selvsagt så er algorithmen som brukes i AES en god del mer avansert enn hva du prøver på å lage.

Andre algorithmer er f.eks Base64, denne algorihmen baserer seg på å lese inn data med lengde på 6-bit (ikke 8-bit eller 1 byte), noe som gir den 64 mulige kombinasjoner, videre har den en tabell med 64 (0-63) tegn som den erstatter med verdien. Men dette fører jo til at antall bit må være mulig å dele på 6 og ikke få noe rest, så da brukes padding på slutten av data streamen for å få riktig antall bit. Dette indikeres i det encodede resultatet med '='-tegn på slutten av stringen.

Eksempel:

Kode

Test
Resultat:

Kode

VGVzdA==
Wikipedia - Base64

EDIT: Det må også nevnes at base64 ikkje må brukes som kryptering algorithme da sikkerheten på denne er meget svak.
Sist endret av 0xFF; 27. november 2013 kl. 19:18.
Sitat av moret Vis innlegg
Dette kan gjøres smellenkelt med string replace. feks:

Kode

import javax.swing.*;
public class krypto{
	public static void main(String[] args){
		String input = JOptionPane.showInputDialog("Hva vil du kryptere");
		String output = input.replace("a", "dddd");
       JOptionPane.showMessageDialog(null, output);
	}
}
Vis hele sitatet...
Hvordan kan man gjøre dette med flere bokstaver ?
Sitat av Broder Safari Vis innlegg
Hvordan kan man gjøre dette med flere bokstaver ?
Vis hele sitatet...
for-each løkke og ta i bruk en HashMap som sier hvilket tegn som skal tolkes til hva. (som beskrivet i tråden Moridin linket til). HashMapen kan f.eks. si
a -> "123abc"
b -> "321cba"
c -> "123abc"
...
Kan også skrive samme linje om igjen flere ganger:

Kode

String output = input.replace("a", "dddd"); 
output = input.replace("b", "fdsfs");
output = input.replace("c", "asdfg");
osv
Sitat av Misoxeny Vis innlegg
Kan også skrive samme linje om igjen flere ganger:

Kode

String output = input.replace("a", "dddd"); 
output = input.replace("b", "fdsfs");
output = input.replace("c", "asdfg");
osv
Vis hele sitatet...
Tror jeg går for denne er ikke noe proff i programering ganske så ny egentlig men takk

Sitat av Misoxeny Vis innlegg
Kan også skrive samme linje om igjen flere ganger:

Kode

String output = input.replace("a", "dddd"); 
output = input.replace("b", "fdsfs");
output = input.replace("c", "asdfg");
osv
Vis hele sitatet...
Det fungerer ikke :/ hmm
Sitat av Misoxeny Vis innlegg
Kan også skrive samme linje om igjen flere ganger:

Kode

String output = input.replace("a", "dddd"); 
output = input.replace("b", "fdsfs");
output = input.replace("c", "asdfg");
osv
Vis hele sitatet...
Jeg er ikkje noe Java programmerer, men denne kodebiten tror jeg du har dårlig resultat med. Det som skjer her er at du assign av retur verdien fra replace funksjonen først til 'output' variablen, for så å gjøre en ny assignment til output variabelen, det dette fører til er at den verdien som 'output' variabelen hadde lagret fra replace funksjonen blir slettet og ny data blir assigned.

EDIT: Det endelige resultatet fra denne koden vil være input data'en der 'c' er byttet med "asdfg", hverken 'a' eller 'b' har blitt erstattet.
Sist endret av 0xFF; 27. november 2013 kl. 20:19.
Her er det jeg har nå

Kode

package krypt;
import javax.swing.*;
public class krypt{
    public static void main(String[] args){
        String input = JOptionPane.showInputDialog("Skrin inn hva som skal krypteres: ");
        String output = input.replace("a", "d2ge");
        output = input.replace("b", "3g4sv");
        output = input.replace("c", "6jfrg");
        output = input.replace("d", "3gdhy5");
        output = input.replace("e", "4gthde");
        output = input.replace("f", "3tddt65");
        output = input.replace("g", "2grhjwd");
        output = input.replace("h", "74hdw");
        output = input.replace("i", "2Dawg");
        output = input.replace("j", "3brys");
        output = input.replace("k", "9ekgt6");
        output = input.replace("l", "4jk5r");
        output = input.replace("m", "5hs4hd");
        output = input.replace("n", "4hs456");
        output = input.replace("o", "3g5h5");
        output = input.replace("p", "4hddrn");
        output = input.replace("q", "2ge4h");
        output = input.replace("r", "5hj78s");
        output = input.replace("s", "2g57dh");
        output = input.replace("t", "1byjcd");
        output = input.replace("u", "5lujo");
        output = input.replace("v", "sh4c42");
        output = input.replace("w", "f3g57");
        output = input.replace("x", "q3th6");
        output = input.replace("y", "q35uj");
        output = input.replace("z", "p3mv5q");
       JOptionPane.showMessageDialog(null, output);
    }
}
For det første, slik det er nå, er det bare replace("z", "p3mv5q") som har resultat på output.
For det andre vil du neppe oppnå det som er ønsket ved å kjøre replace fordi du da vil bytte ut bokstaver som allerede er byttet om eks:

med input = "a";
String output = input.replace("a", "d2ge"); // output = "d2ge"
...
output = output.replace("d", "3gdhy5"); // output = "3gdhy52ge"
Sitat av lor3ntz Vis innlegg
For det første, slik det er nå, er det bare replace("z", "p3mv5q") som har resultat på output.
For det andre vil du neppe oppnå det som er ønsket ved å kjøre replace fordi du da vil bytte ut bokstaver som allerede er byttet om eks:

med input = "a";
String output = input.replace("a", "d2ge"); // output = "d2ge"
...
output = output.replace("d", "3gdhy5"); // output = "3gdhy52ge"
Vis hele sitatet...
Ja, du sier noe der.
Jeg er alt for trøtt til å gidde å gjøre dette helt ferdig, det er et eller annet feil men, her er noe man kanskje kan bygge videre på om man absolutt vil bruke string replace.
Sikkert noen som er smartere enn meg som kan si hva som fucker seg til, jeg går til sengs (tror det er hvordan i og while henger sammen som blir litt kuk i kano)

Kode

import javax.swing.*;
public class krypto{
	public static void main(String[] args) {
		String input = JOptionPane.showInputDialog("Hva vil du kryptere");
		String aReplace = "abc123";
		String bReplace = "xyz789";
		String str = "";
		int i = 0;
		while(i < input.length()){
			if (input.charAt(i) == 'a') {
				str = input.replace("a", aReplace);
				input = str;
				i = i + aReplace.length();				
			}
			if (input.charAt(i) == 'b') {
				str = input.replace("b", bReplace);
				input = str;
				i = i + bReplace.length();				
			}else{
				i++;
			}
		}
		JOptionPane.showMessageDialog(null, str);
	}
}

Kode

package Krypt;
import javax.swing.JOptionPane;

public class Krypt{ 
    public static void main(String[] args) { 
        String input = JOptionPane.showInputDialog("Skriv in det som skal krypteres: "); 
        String aReplace = "f3hs4g"; 
        String bReplace = "xyz789"; 
        String cReplace = "h5e32g"; 
        String dReplace = "26jhbe"; 
        String eReplace = "zfer3b"; 
        String fReplace = "ve5e4g"; 
        String gReplace = "236hrb"; 
        String hReplace = "x2qf45"; 
        String iReplace = "aj09jr"; 
        String jReplace = "6jf8f3"; 
        String kReplace = "9he52g"; 
        String lReplace = "feg5gn"; 
        String mReplace = "25ggjf"; 
        String nReplace = "7jmffe"; 
        String oReplace = "q95hyd"; 
        String pReplace = "2g6nvf"; 
        String qReplace = "3g6nd5"; 
        String rReplace = "feghtf"; 
        String sReplace = "q3tewd"; 
        String tReplace = "3gtnvd"; 
        String uReplace = "neg6br"; 
        String vReplace = "pi64h7"; 
        String wReplace = "34ggnf"; 
        String xReplace = "xvs46d"; 
        String yReplace = "qz3z4g"; 
        String zReplace = "dg4gy6"; 
        String str = ""; 
        
        int i = 0; 
        while(i < input.length()){ 
            if (input.charAt(i) == 'a') { 
                str = input.replace("a", aReplace); 
                input = str; 
                i = i + aReplace.length();                 
            } 
                if (input.charAt(i) == 'b') { 
                    str = input.replace("b", bReplace); 
                    input = str; 
                    i = i + bReplace.length();                 
                } 
                    if (input.charAt(i) == 'c') { 
                        str = input.replace("c", cReplace); 
                        input = str; 
                        i = i + cReplace.length();                 
                    } 
                        if (input.charAt(i) == 'd') { 
                            str = input.replace("d", dReplace); 
                            input = str; 
                            i = i + dReplace.length();                 
                        } 
                            if (input.charAt(i) == 'e') { 
                                str = input.replace("e", eReplace); 
                                input = str; 
                                i = i + eReplace.length();                 
                            } 
                                if (input.charAt(i) == 'f') { 
                                    str = input.replace("f", fReplace); 
                                    input = str; 
                                    i = i + fReplace.length();                 
                                } 
                                    if (input.charAt(i) == 'g') { 
                                        str = input.replace("g", gReplace); 
                                        input = str; 
                                        i = i + gReplace.length();                 
                                    } 
                                        if (input.charAt(i) == 'h') { 
                                            str = input.replace("h", hReplace); 
                                            input = str; 
                                            i = i + hReplace.length();                 
                                        }         
                                            if (input.charAt(i) == 'i') { 
                                                str = input.replace("i", iReplace); 
                                                input = str; 
                                                i = i + iReplace.length();                 
                                            } 
                                                if (input.charAt(i) == 'j') { 
                                                    str = input.replace("j", jReplace); 
                                                    input = str; 
                                                    i = i + jReplace.length();                 
                                                } 
                                                    if (input.charAt(i) == 'k') { 
                                                        str = input.replace("k", kReplace); 
                                                        input = str; 
                                                        i = i + kReplace.length();                 
                                                    }  
                                                        if (input.charAt(i) == 'l') { 
                                                            str = input.replace("l", lReplace); 
                                                            input = str; 
                                                            i = i + lReplace.length();                 
                                                        } 
                                                            if (input.charAt(i) == 'm') { 
                                                                str = input.replace("m", mReplace); 
                                                                input = str; 
                                                                i = i + mReplace.length();                 
                                                            } 
                                                                if (input.charAt(i) == 'n') { 
                                                                    str = input.replace("n", nReplace); 
                                                                    input = str; 
                                                                    i = i + nReplace.length();                 
                                                                } 
                                                                    if (input.charAt(i) == 'o') { 
                                                                        str = input.replace("o", oReplace); 
                                                                        input = str; 
                                                                        i = i + oReplace.length();                 
                                                                    } 
                                                                        if (input.charAt(i) == 'p') { 
                                                                            str = input.replace("p", pReplace); 
                                                                            input = str; 
                                                                            i = i + pReplace.length();                 
                                                                        } 
                                                                            if (input.charAt(i) == 'q') { 
                                                                                str = input.replace("q", qReplace); 
                                                                                input = str; 
                                                                                i = i + qReplace.length();                 
                                                                            } 
                                                                                if (input.charAt(i) == 'r') { 
                                                                                    str = input.replace("r", rReplace); 
                                                                                    input = str; 
                                                                                    i = i + rReplace.length();                 
                                                                                } 
                                                                                    if (input.charAt(i) == 's') { 
                                                                                        str = input.replace("s", sReplace); 
                                                                                        input = str; 
                                                                                        i = i + sReplace.length();                 
                                                                                    } 
                                                                                        if (input.charAt(i) == 't') { 
                                                                                            str = input.replace("t", tReplace); 
                                                                                            input = str; 
                                                                                            i = i + tReplace.length();                 
                                                                                        } 
                                                                                            if (input.charAt(i) == 'u') { 
                                                                                                str = input.replace("u", uReplace); 
                                                                                                input = str; 
                                                                                                i = i + uReplace.length();                 
                                                                                            } 
                                                                                                if (input.charAt(i) == 'v') { 
                                                                                                    str = input.replace("v", vReplace); 
                                                                                                    input = str; 
                                                                                                    i = i + vReplace.length();                 
                                                                                                } 
                                                                                                    if (input.charAt(i) == 'w') { 
                                                                                                        str = input.replace("w", wReplace); 
                                                                                                        input = str; 
                                                                                                        i = i + wReplace.length();                 
                                                                                                    } 
                                                                                                        if (input.charAt(i) == 'x') { 
                                                                                                            str = input.replace("x", xReplace); 
                                                                                                            input = str; 
                                                                                                            i = i + xReplace.length();                 
                                                                                                        } 
                                                                                                            if (input.charAt(i) == 'y') { 
                                                                                                                str = input.replace("y", yReplace); 
                                                                                                                input = str; 
                                                                                                                i = i + yReplace.length();                 
                                                                                                            } 
                                                                                                                if (input.charAt(i) == 'z') { 
                                                                                                                    str = input.replace("z", zReplace); 
                                                                                                                    input = str; 
                                                                                                                    i = i + zReplace.length();                 
                                                                                                                } else {
                                                                                                                	i++;
                                                                                                                }
                                                                                                            }
                                                                                                            JOptionPane.showMessageDialog(null, str); 
                                                                                                        }
}

Hva som er feilen ?
Sitat av Broder Safari Vis innlegg
Hva som er feilen ?
Vis hele sitatet...
Hvilken feilmelding får du? Har du prøvd å google feilmeldingen for å se etter løsninger?

Om du skal lære deg programmering blir du fint nødt til å lære deg å lese feilmeldinger og debugge programmer som ikke oppfører seg som forventet, ikke bare poste kildekoden din på internett og be noen andre fikse problemene dine.
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 6
at java.lang.String.charAt(Unknown Source)
at Secret.Stealer.MainStealer.main(MainStealer.java:122)

Og fant ikke noe som vare relevant til min kode
Her har du en liten klasse som gjør det du ønsker (tror jeg):

Kode

import java.util.HashMap;

public class InsecureKrypt {
    public static String insecureKrypt(String text) {
        HashMap map = new HashMap();
        map.put("a","ohRoo8Oo");
        map.put("b","Pheew4wo");
        map.put("c","ohc9Choo");
        map.put("d","Dee1yah7");
        map.put("e","aiR2oos6");
        map.put("f","Phoiquu0");
        map.put("g","GohDuo6U");
        map.put("h","zoo4YeY0");
        map.put("i","Roh5ahGh");
        map.put("j","IeMaih4f");
        map.put("k","Dai3aenu");
        map.put("l","dieque9I");
        map.put("m","thaF9eeh");
        map.put("n","asdfbgsdfh");
        map.put("o","345gv235yv");
        map.put("p","45gewwb ");
        map.put("q","g5ghtu");
        map.put("r","ert45bn ");
        map.put("s","56 j5eyu57k");
        map.put("t","34g5trbht");
        map.put("u","bt46jht4h5");
        map.put("v","5vb3 6buj");
        map.put("w","253tv 1235t");
        map.put("x","5y1342c");
        map.put("y","7iu3y2");
        map.put("z","2345235b56u2w");
        
        String newString = "";
        for(int i = 0; i < text.length(); i++) {
            String replacer = String.valueOf(text.charAt(i));
            if(map.containsKey(replacer)) {
                newString += ((String)map.get(replacer));
            } else {
                newString += replacer;
            }
        }
        return newString;
    }
}
Om du skal bruke denne, kan du gjøre f.eks:

Kode

public class Krypt {
    public static void main(String[] args) {
        System.out.println(InsecureKrypt.insecureKrypt("this is my word - it shall be interesting to see what the 'encrypted' version looks like"));
    }
}
Tror denne måten er litt mer dynamisk også da du enkelt kan legge til/fjerne elementer i hashmapen og lignende. Du kan også "dekryptere" koden din ved å søke opp elementer i den krypterte strengen osv.
Sist endret av Java; 28. november 2013 kl. 13:27. Grunn: Tillegg i tekst
Sitat av Broder Safari Vis innlegg
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 6
at java.lang.String.charAt(Unknown Source)
at Secret.Stealer.MainStealer.main(MainStealer.java:122)

Og fant ikke noe som vare relevant til min kode
Vis hele sitatet...
Steg 1, forstå feilmeldingen. Her har du relevant dokumentasjon:
http://docs.oracle.com/javase/7/docs...Exception.html

Hva betyr det at du er "out of bounds" ?


Steg 2, finne ut hvor feilen ligger.

Kode

int i = 0;  
while(i < input.length()){  
    if (input.charAt(i)
Om input-variablen din inneholder "foo" vil foo.length() returnere 3, men i programmeringsspråk starter man å telle på 0, ikke 1. hva skjer når du kjører input.charAt(3) ?
Sist endret av liasis; 28. november 2013 kl. 13:33.