Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]7155[/thread]

adfgvx-Verschluesselung umsetzen



<< |< 1 2 >| >> 11 Einträge, 2 Seiten
DrWhiteLetter
 2005-07-24 00:53
#56637 #56637
User since
2005-01-30
26 Artikel
BenutzerIn
[default_avatar]
Es geht um folgende Verschlüsselung, ich habe sie ein wenig zusammen gefasst:
http://www.cybergesellschaft.de/perl/adfgvx-verschluesselung.html

Jetzt würde ich das gerne in Perl verwirklichen, nur wie krieg ich das mit der Tabelle hin? Ich habe gerade so mal garkeine Idee...
Irgendwie muss Perl ja den Buchstaben links und Oben erkennen der dem gesuchten zugeordnet ist, man könnte nun natürlich jedem Buchstaben ein Buchstabenpaar zuweisen, aber das wäre wohl etwas umständlich.

PS: Dass die Verschlüsselung nicht sicher ist weiß ich ... ;) soll als Übung dienen.

Danke schonmal für gedankenanstösse, code brauch ich nicht unbedingt nur ne Idee. ;)\n\n

<!--EDIT|esskar|1122160383-->
J-jayz-Z
 2005-07-24 02:15
#56638 #56638
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ich glaub, da gibt es einige Probleme mit deinem Webserver...
Das html file muss erst runter geladen werden...
Na ja, es ist eigentlich recht simpel, was du da mache willst.
Hier mal ein ansatz:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
#!/usr/bin/perl
use strict;
use warnings;

my $variable = 'a b';

$variable =~ s/a/vd/g;
$variable =~ s/b/ff/g;

print $variable . "\n";

mir ist als aller erster tr eingefallen, aber damit kann mananscheinend nur einen Buchstaben in einen Buchstaben umwandeln, ist das richtig?
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
Ronnie
 2005-07-24 02:18
#56639 #56639
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Mal ein kleines Muster:
Code: (dl )
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
#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;

my @set = map { chomp; split /\s/, $_; } <DATA>;
my %lut; @lut{@set} = (1..36);
my %keys = ( 1 => 'a', 2 => 'd', 3 => 'f', 4 => 'g', 5 => 'v', 6 => 'x' );
#print Dumper \%lut;
print "$_:\t", $lut{$_},
"\tX:", $lut{$_} % 6 ? $lut{$_} % 6 : 6,
"\tY:", $lut{$_} % 6 == 0 ? int($lut{$_} / 6) : int($lut{$_} / 6) + 1,
"\tCode:", $keys{$lut{$_} % 6 ? $lut{$_} % 6 : 6}, " ",
$keys{$lut{$_} % 6 == 0 ? int($lut{$_} / 6) : int($lut{$_} / 6) + 1},
"\n" for (qw /p x d/);

_ _DATA_ _
m l k 1 h g
p 2 o i f u
e r b d t z
5 6 s v 7 j
4 a q 3 c 9
y n 0 w 8 x

Achtung: Die Bindestriche von DATA müssen zusammengeschrieben werden (Fehler hier im Forum).\n\n

<!--EDIT|Ronnie|1122157293-->
J-jayz-Z
 2005-07-24 02:26
#56640 #56640
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
@ronnie: sehr schöner code !
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
esskar
 2005-07-24 03:16
#56641 #56641
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=J-jayz-Z,24.07.2005, 00:26]@ronnie: sehr schöner code ![/quote]
naja :)
esskar
 2005-07-24 03:46
#56642 #56642
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
ist ein wenig länger
Code: (dl )
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
#!/usr/bin/perl

use strict;
use warnings;

my @Chars = ('a'..'z', 0..9);
my %IndexToADFGVX = (0, 'A', 1, 'D', 2, 'F', 3, 'G', 4, 'V', 5, 'X');

sub gen_keymix {
    my @mixed = @Chars;
    for(my $i = scalar @mixed; $i > 1;) {
        my $r = int(rand($i--));

        ($mixed[$i], $mixed[$r]) = ($mixed[$r], $mixed[$i]);
    }

    return @mixed;
}

sub gen_keytable {
    my (@mixed) = @_;

    my %table = ();

    for my $row (0 .. 5) {
        for my $col (0 .. 5) {
            $table{shift @mixed} = $IndexToADFGVX{$row}.$IndexToADFGVX{$col};
        }
    }

    return %table;
}

sub adfgvx_crypt {
    my ($table, $data) = @_;

    my $result = join "", map {
        $table->{$_},
    } split //, $data;

    return $result;
}


my @key = &gen_keymix;
my %tab = &gen_keytable(@key);

print adfgvx_crypt(\%tab, 'aperlhacker');
\n\n

<!--EDIT|esskar|1122162391-->
lichtkind
 2005-07-24 03:54
#56643 #56643
User since
2004-03-22
5681 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
hab das gefühl das man da massig kürzen kann
schon allein mit @keys = qw(a d f g v x);
und dann würd ich so was ähnliches wie schwarzen trafo nehmen
hoffentlcih hab ich nichts übersehen aber:

@keys = qw(a d f g v x);
my (%trans, $row);
map {chomp; $trans{chop}= $keys[$row].$keys[$_] for 5..0; $row++} <DATA>;\n\n

<!--EDIT|lichtkind|1122163029-->
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
lichtkind
 2005-07-24 04:08
#56644 #56644
User since
2004-03-22
5681 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
esskar oder so
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
Ronnie
 2005-07-24 13:44
#56645 #56645
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
@esskar: Schöner sauber in Funktionen gesplitetter Code!

Mit Verwendung einer zweidimensionalen Struktur (wie von Esskar) spart man sich natürlich die ganze unschöne Arithmetik um die Position im Grid zu bestimmen:
Code: (dl )
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
#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;

my $to_encode = 'a perlhacker';
my $separator = '#';
my $set = [ map { chomp; [split /\s/, $_]; } <DATA> ];
my %keys; @keys{0..5} = qw/a d f g v x/;
my %lut;
for my $row (0 .. 5) {
for my $col (0 .. 5) {
$lut{$set->[$row]->[$col]} = $keys{$row}.$keys{$col};
}
}
my $encoded = join ' ',
map { $lut{$_} ? $lut{$_} : $separator }
split //, $to_encode;

print $encoded, "\n";

_ _DATA_ _
m l k 1 h g
p 2 o i f u
e r b d t z
5 6 s v 7 j
4 a q 3 c 9
y n 0 w 8 x
\n\n

<!--EDIT|Ronnie|1122198394-->
esskar
 2005-07-24 14:54
#56646 #56646
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=Ronnie,24.07.2005, 11:44]@esskar: Schöner sauber in Funktionen gesplitetter Code!
Mit Verwendung einer zweidimensionalen Struktur (wie von Esskar)[/quote]
Das "naja" von oben, war auch nur auf den Stil bezogen, nicht auf die Lösung.
Aber ich nutze nix zweidimensionales.... es sieht nur so aus!
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2005-07-24 00:53.