Text (nicht sicher) verschlüsseln, aber für Human lesbar....!

Ehh, wenn ich Buchstaben Wörtern in zufälliger Reihenfolge schreibe, ist es dann für Lesbarkeit wichtig, ob erster und letzter Buchstabe an seiner Stelle bleibt? Welche befahren gibt es da? Was wäre mit Kommas und ander Satzzeichen?

Ja ok. Lerne bitte erst mal sinnvolle Sätze zu schreiben, bevor du dich an die hohe Kunst des Aneinandereihen von schwierigen Buchstaben wagst. :wink:

Ehh, ja, könnte jetzt erwidern, lerne erst mal proggen, bevor du einen Progger maßregelst, aber das lasse ich mal stecken. Sonst noch wer vill. 'ne Idee??

Is das jetzt dein ernst? Du brauchst Hilfe um aus “Hallo Welt” “Hlalo Wlet” zu machen und nennst dich “Progger”?

Meinst du sowas?
http://www.m-frie.de/fun/fun.htm?/fun/texte/salat.htm

Progger schreiben auch nicht Zuhause sondern zu Hause.

Es handelt sich auch mir nicht um den Implementierungsvorgang, sondern, welches noch lesbar wäre (Ergb. der Sprachwissenschaft).

*** Edit ***

So ungefähr hab ich mir das gedacht:


    public static String verschl(String input) {
        StringBuilder output = new StringBuilder(input.length());
        Matcher m = PAT.matcher(input);
        int i = 0;
        while (m.find()) {
            output.append(input.substring(i, m.start()));
            output.append(m.group(1));
            output.append(m.group(2));
            i = m.end();
        }
        output.append(input.substring(i));
        return output.toString();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        System.out.println(verschl("Hallo, Test. Test-test!"));``` Gut oder schlecht?

m = Matcher
i = Index (inklusiv) des ersten Zeichens

Mit m.group(1) und m.group(2) soll jetzt Magie geschehen.

*** Edit ***

So hatte ich mir das vorgestellt:

yhW: yuo? acn, ared: hsit! txet. otasml, flserleotfys! The: ordre; of? the: ertt
sel, is, tslil? oeytmeclpl- smesde: up. tBu. taht. si! slao, nto; ta; all- eht,
tieshedblsa? iritshB- iissnscett, adleayr! orem! thna! 25: ysear- Teyh! sadek? n
stusdet? ot? erda: xttse, iwht, ysems. nehcdxeag! letsert? Nnoe, fo? meht; had,
serbmolp? hitw- it- as: gonl? as- nloy? eth; rfits, and- tals: elttre, fo: chea?
 drwo! wsa! crecotr- The? rpxetieenm. vrosep? taht- hte, swdor? aer- peviceedr!
sa; a, oelwh; nda: hatt: teh! ranbi; yttoanslnc; wsadr! up? hohepseyst! rndgiea?
 If: aslo, nimofrc, htsi; wenh; ngoloik, at; het? rwod? trupice- oynl? iliurapse
fc, het: alvdudniii, seletrt! rae; autyvlril. no. longre? eeerdcpvi: :)

Progger schreiben auch nicht Zuhause sondern zu Hause.

“Progger” vielleicht nicht, der Duden aber sehr wohl.

Ja, für die Lesbarkeit ist der erste und letzte Buchstabe eigentlich ausschlaggebend. Die Reihenfolge der Restlichen ist für unser Gehirn nicht so relevant. Der Text den du da unten gepostet hast ist imho nicht lesbar.

Jetzt müsste er „lesbarer“ sein:

Why you can read this txet aslmot estfleflosry- The odrer of the letrtes is sitl
l cellpeotmy mseesd up! But that is aslo not at all? the ebsltsiaehd Bitirsh sns
citties araldey more tahn 25 yares: Tehy aeksd seuttnds to raed ttxes wtih mssey
ehegnacxd lerttes- None of tehm had porbmles with it! as long as only the first
and lsat lteter of each word was correct- The exerpnimet pevros taht the wodrs
are peerivced as a wlhoe? and taht the bairn catltsnnoy dwras up hspoethyes rani
edg? If aslo cnfriom this wehn loknoig at the word ptrciue olny safieuricpl? the
idinidvaul lrttees are vuatllriy no loengr perveceid-

Der Text wurde maschinell durch den google-Übersetzer übersetzt und ist aus Connys Link entnommen.

Ehh, das Ganze aber nur, weil in Englischen Texten keine Umlaute uns so weiter sind. :smiley:

Besser wäre das.

Gut, ich habe das Ganze noch mal verbessert, und:

Wmleokilmn auf byte-welt?net – Die Welt des Prgrireemnamos
Byte?Welt ist enie fhiruneldce: aus veelin Pfrios bthednesee Cinmtumoy? die Dcih mit Hrez und Lfnsidahecet bei der Lsnöug von Peomrebln mit der Pmrianueorrmgg in vrdeienhsecen Paarrmsgmceeohrpirn utrsttznüet.
Du ksnnat als Gast ohne Reitsgrerunig alle Fctäghiebrae lesen und sslebt acuh Brgäetie scerehibn- Wenn dies Dein etresr Bsuech bei uns ist? emlepefhn wir Dir? znäschut die FAQ - Häifug gseeltlte Faregn duluzerceshn,
Für die Tlmienahe an der übeaurs reegn und fenuiehcdlrn Btye.Wlet:Cummitony ist enie Rieurstrngeig nendtwiog! Desie ist kolntseos und ohne jhegcile Vhiefrplncutg: Du ehslrätt dmiat dann acuh Zangug zu weierten Byte:Welt-Disenten?
Zum Lseen von Bäeetrgin: wlhsät Du bitte das Fruom? das Dich inesertirset: aus der fedngloen Üeschbirt aus-

Jetzt sind mehrere Stufen der Verschlüsselung möglich, und ich habe einen ReentrantLock eingebaut :slight_smile: weil das Ganze mit mehreren Threads funktioniert.

Jemand Interesse an dem ganzen Prog? Sonst kann das Thema eigentlich auf gelöst stellen.

[quote=CyborgBeta]m = Matcher
i = Index (inklusiv) des ersten Zeichens[/quote]

Wenn du soetwas hast, ist das immer ein Zeichen dafür, dass du deine Variablen besser benennen solltest. Also bennen diese am besten gleich mit matcher und index.

Desweiteren finde ich es nicht gut, wie provokant/aggressiv hier (Conny ausgenommen) auf die Frage vom TO reagiert wird!

naja… was soll man dazu sagen? Ich habe nichts gegen CB (hat mich ja noch nicht beleidigt), aber was ich von ihm bis jetzt gelesen hab, verstehe ich die Reaktion anderer User. Natürlich ist es nicht schön solche antworten zu bekommen, aber wie ein schönes Sprichwort besagt: “Wie du mir, ich so dir”.

Wir sind hier aber nicht im Kindergarten. Von den meisten hier gehe ich aus dass es Erwachsene Menschen sind und wenn man von jemandem erwartet, dass er sich hinsichtlich seiner Aktionen/Reaktionen bessern soll, dann sollte man da auch mit gutem Beispiel voran gehen. Dieses “wie du mir, so ich dir” bringt keinen weiter und wer davon überzeugt ist, darf sich auch nicht wundern wenn keine Besserung eintritt.

Ich gebe dir natürlich Recht, dass man mit solchen Verhalten jemanden nicht bessert. Aber eure ganzen Versuche sind ja schon gescheitert… Aber egal ich werd mich jetzt raushalten :smiley:

Dazu kann ich nur sagen: Wer sich als Profi sieht, sollte sich auch so verhalten. Also entweder einigermaßen vernünftig antworten (was natürlich auch berechtigte, aber konstruktive Kritik einschließt), oder einfach ignorieren. Man sollte dabei auch die didaktische Seite nicht vergessen: Man gibt den Betreffenden bei pampigen Antworten einen ausgezeichneten Vorwand, die Probleme auf die anderen zu schieben (“die helfen mir nicht, die verarschen mich nur, die trollen…”), anstatt an sich selbst zu arbeiten. Dann darf man sich nicht wundern, wenn CB auch in zehn Jahren noch die gleichen Fragen stellt.

Für mein Vorhaben habe ich mir eine kleine GUI gebastelt:

        final JTextArea jta = new JTextArea();
        JScrollPane jsp = new JScrollPane(jta);
        JMenuBar jmb = new JMenuBar();
        JMenu jm = new JMenu("Misc");
        JMenuItem jmi1 = new JMenuItem("verschl");
        JMenuItem jmi2 = new JMenuItem("Exit");
        jf.add(jsp);
        jm.add(jmi1);
        jm.add(jmi2);
        jmb.add(jm);
        jf.setJMenuBar(jmb);```

weil es mit der Kommandozeile und Umlauten nicht so einfach ist.

Jetzt schon wieder: In welcher Reihenfolge die Variablen und in welcher Reihenfolge die .add()-Aufrufe (schreiben)?

Außerdem weiß ich nicht, ob ein ReentrantLock (RL) notwendig ist:

```        final ReentrantLock rl = new ReentrantLock();
        jmi1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                rl.lock();
                try {
                    String str = jta.getText();
                    jta.append("

");
                    jta.append(verschl(str));
                    jta.append("
");
                } finally {
                    rl.unlock();
                }
            }
        });
        jmi2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                jf.dispose();
            }
        });```

verschl() sollte nicht von mehreren Threads gleichzeitig aufgerufen werden, aber ich weiß nicht, ob der User das schafft. Der User wäre ich in dem Fall.

Die eigentliche Action:

```    public static String mische(String str) {
        ArrayList<Character> al = new ArrayList<Character>(str.length());
        for (int i = 1; i < str.length() - 1; i++) {
            al.add(str.charAt(i));
        }
        Collections.shuffle(al, SEC);
        StringBuilder sb = new StringBuilder(str.length());
        sb.append(str.charAt(0));
        for (Character character : al) {
            sb.append(character);
        }
        sb.append(str.length() >= 2 ? str.charAt(str.length() - 1) : "");
        return sb.toString();
    }

    public static String satzzeichen(String str) {
        if (str.isEmpty()) {
            return "";
        }
        char[] ca = "-.:,;!?".toCharArray();
        return String.valueOf(ca[SEC.nextInt(ca.length)]);
    }```

char[] ca = "-.:,;!?".toCharArray(); könnte vielleicht in die Klasse, aber vielleicht trickst da der Compiler auch ein bisschen.

Collections.shuffle(); mischt besser/sicherer, als wenn ich einfach nur alle Elemente mit einem zufälligen anderen Element vertausche.

Man liest Wörter also als Ganzes und nicht nur einzelne Buchstaben, was ist aber, wenn mehrere gleiche Buchstaben nebeneinander stehen (sie wurden sortiert).

 @Landei : Warum soll man als Halb-Profi nicht auch mal "eine" Frage stellen dürfen?, über Kritik kann ich eigentlich lächeln.


So, nun noch mal die Genrealprobe:
[spoiler]Für mein Vhbroean habe ich mir eine klinee GUI glbtseeat?

```        fainl JmrFae jf = new JrmaFe("1xeV1Terschtl");
        fnail JerTtxeAa jta = new JreTextAa();
        JrnolSlaPce jsp = new JaclnoPlSre(jta);
        JnueMBar jmb = new JeaBunMr();
        JeMnu jm = new JneMu("Msic");
        JIuteeMnm jim1 = new JneIeMutm("vesrhcl");
        JIenuMtem jim2 = new JMuteeInm("Eixt");
        jf,add(jsp);
        jm-add(jmi1);
        jm;add(jim2);
        jmb.add(jm);
        jf:stnueBMaeJr(jmb);```

wiel es mit der Kaodmmoienlze und Umetualn nhict so efnicah ist.

Jeztt shcon wdeeir! In wehelcr Ronlgfiehee die Varbilean und in wcheler Rnighelefoe die .add()-Afufrue (srhebicen)?

Audeßrem wieß ich nicht. ob ein RtntraLncoeek (RL) nwindeotg ist.

```        final RnLtonecretak rl = new RtcLnrneaeotk();
        jmi1:aieendsoLtcAidtnr(new AiteiocnLtensr() {
            @Ovirerde
            pbiulc void ancrfrooPteiemd(AtvnenociEt e) {
                rl?lcok();
                try {
                    Srntig str = jta;gxteTet();
                    jta.aenppd("

");
                    jta,anpped(vcehrsl(str));
                    jta.apenpd("
");
                } fallniy {
                    rl:unlcok();
                }
            }
        });
        jmi2:aLiseictAnnoedtdr(new AncnoiesitetLr() {
            @Oirrvede
            plbiuc void aoterrPefmonicd(AtEcnoinvet e) {
                jf?dissope();
            }
        });```

vcsherl() soltle nhcit von mreheren Tredhas gtelicehizig auurffegen werden, aebr ich weiß nhcit- ob der Uesr das sfachft? Der User wäre ich in dem Fall;

Die eginhcelite Actoin?

```    puiblc satitc Sritng mische(Sirntg str) {
        AyrrsLait<Chaacrter> al = new ALryairst<Ccaetharr>(str:lgneth());
        for (int i = 1? i < str.lntegh() - 1. i++) {
            al?add(str:chaArt(i));
        }
        Coltcieolns;sluffhe(al! SEC);
        SiilrBnetgdur sb = new SirenBdilgutr(str:lgtneh());
        sb.aeppnd(str-charAt(0));
        for (Cetahcarr ccrhtaaer : al) {
            sb;anpepd(chaectrar);
        }
        sb!aenppd(str?letgnh() >= 2 ? str.chaArt(str,lgtenh() - 1) : "");
        reutrn sb;tntoiSrg();
    }

    pbuilc sttiac Sntirg sateezzcihn(Srting str) {
        if (str!iEmtspy()) {
            return "";
        }
        char[] ca = "-.:,;!?".troarCahrAy();
        reutrn Stirng,veOualf(ca[SEC:nxInett(ca:lgetnh)]);
    }```

char[] ca = "-.:,;!?".tCroraArhay(); knntöe vhleliicet in die Ksslae, aebr vlleehciit tirkcst da der Ciolmper acuh ein bsiechsn-

Coctllnoies:sufhfle(); mishct besesr/shreecir: als wnen ich ecnfiah nur alle Eeetnlme mit eeinm zlfluäeign aednern Enleemt veactushre:

Man lseit Wöetrr aslo als Gnzaes und nhict nur eizenlne Btbuecsahn: was ist aber? wenn mheerre ghicele Bethbauscn nbdeaienenenr sehetn (sie wredun siorrtet).

@Ldenai, Waurm soll man als Hlab?Prfoi nhcit acuh mal "enie" Fgrae selteln drfüen; üebr Kitrik kann ich ecilitnegh lceähln:[/spoiler]

Lieber @CyborgBeta , natürlich sollst du hier Fragen stellen können und auch - soweit es die Frage erlaubt - ordentliche Antworten erwarten können. Trotzdem wäre es schön, wenn du auch ein wenig darüber nachdenken würdest, warum immer ausgerechnet bei dir herablassende oder pampige Antworten kommen. Das ist zwar nicht nett, hat aber auch einen Grund - du weißt schon, der alte Witz mit den hunderten Geisterfahrern. Du könntest von denen, die dich hier “trollen”, so viel lernen, wenn du dich nur ein klein wenig zurücknehmen würdest, und ernsthaft zuhören würdest, was sie zu sagen haben. Du machst es dir mit deiner unreflektierten Art selbst unnötig schwer, etwas dazuzulernen - insbesondere wenn es nicht um Fakten, sondern um “weiches” Erfahrungswissen geht.

Ich will jetzt gar nicht deinen obigen Code zerlegen - er wird sicher keinen Schönheitspreis gewinnen und ist noch weit weg von “Profi”, aber immerhin tut er, was er soll, und es ist schon so etwas wie Struktur erkennbar. Trotzdem fällt auf, dass du viel zuwenig Wert auf guten, lesbaren Code legst, sondern schon damit zufrieden bist, dass er “läuft”. Und mit dieser Herangehensweise wirst du eben selbst bestimmt kein “Profi” werden. Weiterhin scheinst du nicht gut mit Kritik umgehen zu können - dabei ist Kritik das beste, was dir als Programmierer passieren kann. Trotzdem scheinst du teilweise auch ehrliche und gute Ratschläge leichtfertig in den Wind zu schlagen, und den Helfenden obendrauf noch zu beleidigen.

Bevor du antwortest, hole noch einmal tief Luft, lies vielleicht noch einmal den Verlauf in diesem oder anderen Threads nach. Ich würde mir nicht die Mühe machen, überhaupt etwas zu schreiben, wenn ich nicht die Hoffnung hätte, dass du dich verbessern könntest.