Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

Binärdatei in Perl schreiben

Diskussion: Binärdatei in Perl schreiben im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Ich habe verschlüsselte Werte in Form von 8-Bit Zahlen vorliegen und muss diese in eine Datei schreiben. Funktionen wie ...

Like Tree2Likes
  • 2 Post By GrafZahl

Antwort
Alt 18.09.11, 17:08   #1 (permalink)
 
Benutzerbild von Hackse
 
Registriert seit: 31.07.06
Hackse Leistung: 8086
Likes: 32
Standard Binärdatei in Perl schreiben

Anzeige

Ich habe verschlüsselte Werte in Form von 8-Bit Zahlen vorliegen und muss diese in eine Datei schreiben. Funktionen wie int() und sprintf() schreiben leider den String der Zahl in die Datei, d.h. sprintf("%d", "135") schreibt die drei Zeichen "1", "3" und "5" in die Datei, anstatt das Byte mit dem Wert 135.

ASCII-Zeichen können wie üblich verarbeitet werden:

Code:
#!/usr/bin/perl -w
use strict;

open FILE, "> file.txt";
binmode FILE;
print FILE chr(65); # schreibe 'A'
print FILE chr(66); # schreibe 'B'
print FILE chr(67); # schreibe 'C'
print FILE "\n";     #  Zeilenumbruch 
close FILE;
exit 0;
Code:
cat file.txt 
ABC
Stoßen aber chr() oder print() auf ein NON-ASCII-Zeichen, erhält man Fehlermeldungen wie z.B. : "Wide Character in print" (was ja formal korrekt ist).

Wie bekomme ich beliebige 8-Bit Werte in eine Datei hinein?


Greetz
Hackse
Hackse ist offline   Mit Zitat antworten
Alt 18.09.11, 17:47   #2 (permalink)
 
Registriert seit: 12.08.10
mime Leistung: Pentium Imime Leistung: Pentium I
Likes: 30
Standard

Zitat:
Zitat von Hackse Beitrag anzeigen
Wie bekomme ich beliebige 8-Bit Werte in eine Datei hinein?
Zitat:
Zitat von perldoc perldiag
Wide character in %s
(S utf8) Perl met a wide character (>255) when it wasn't expecting one.
This warning is by default on for I/O (like print). The easiest way to
quiet this warning is simply to add the ":utf8" layer to the output, e.g.
"binmode STDOUT, ':utf8'". Another way to turn off the warning is to add
"no warnings 'utf8';" but that is often closer to cheating. In general, you
are supposed to explicitly mark the filehandle with an encoding, see open
and "binmode" in perlfunc.
HTH

Micha
__________________
http://www.openvas.org
mime ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 18.09.11, 17:54   #3 (permalink)
Member of Honour
 
Benutzerbild von GrafZahl
 
Registriert seit: 28.05.10
GrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: Opteron
Likes: 210
Standard

wenn du wirklich binärdaten willst -> filehandle auf binmode ... danach musst du noch vorgeben wie die daten interpretiert/dargestellt werden sollen, dazu wirf mal einen blick auf die pack() funktion ... beim lesen hilft unpack()
Hackse and bitmuncher like this.
__________________
Code:
:(){ :|:& };:
Veritas Aequitas
GrafZahl ist offline   Mit Zitat antworten
Alt 22.09.11, 14:51   #4 (permalink)
Themenstarter
 
Benutzerbild von Hackse
 
Registriert seit: 31.07.06
Hackse Leistung: 8086
Likes: 32
Standard

Danke für den Hinweis, GrafZahl.

Hab's mir angesehen. Irgendwie bekomme ich via unpack() dennoch die Strings der Zahlen in die Datei, anstatt die Werte.

Vereinfacht lässt sich das Problem wie folgt runterbrechen:

1.) Textdatei zeilenweise einlesen
2.) Jedes Zeichen der eingelesenen Datei z.B. mit XOR 5 (xor fünf) überlegen
3.) xorifizierte Datei in das Dateisystem schreiben.

Bisher habe ich folgendes:

Code:
#!/usr/bin/perl -w
use strict;

my $crypt_factor=5;

#$1: input text-file
#$2: encrypted outputfile

  sub encrypt() {
    my ($file, $outfile) = @_;
    my $buffer_out;
    my $symbol;
    open (FIN, "<", $file) || die "cannot open file: $file\n";
    my @buffer=<FIN>;
    close(FIN);
    open (FOUT, ">", "$outfile") || die "cannot open output file: $outfile\n";
    binmode(FOUT);
    map {
      my $pointer=\$_;                           # Zeiger auf aktuelle Zeile
      my $len=length($$pointer);                 # Zeilenlaenge ermitteln
      my $xor_str=($crypt_factor) x $len;        # xor-Pattern erzeugen, gleiche Laenge wie akt. Zeile
      my $out_str=$$pointer ^ $xor_str;          # xor Pattern ueber String legen
      my @out_vector=unpack("C$len", $out_str);  # xor-verschluesselte Zeichen als Single-Bytes in Vektor speichern
      for (@out_vector) {
        print FOUT $_ || die ("error while writing to output file: $outfile\n");
      }
    } @buffer;
    close(FOUT);
    return 0;
  }

my $f=shift @ARGV;
&encrypt("$f", "$f.crypt");
exit 0;
Code:
./encrypt.pl test.txt
Code:
cat test.txt
zeile 1
zeile 2
zeile 3
ende
Code:
cat test.txt.crypt 
1499222095105723220814992220951057428816149922209510573632801347509072
Habe für unpack() verschiedene Templates versucht.

Ideen?

Geändert von Hackse (22.09.11 um 14:54 Uhr)
Hackse ist offline   Mit Zitat antworten
Alt 22.09.11, 16:27   #5 (permalink)
Member of Honour
 
Benutzerbild von GrafZahl
 
Registriert seit: 28.05.10
GrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: Opteron
Likes: 210
Standard

Zitat:
Zitat von GrafZahl Beitrag anzeigen
wirf mal einen blick auf die pack() funktion ... beim lesen hilft unpack()
Zitat:
Zitat von Hackse Beitrag anzeigen
Habe für unpack() verschiedene Templates versucht.

Ideen?

bist du sicher, dass du an dieser stelle LESEN willst?

binär schreiben -> pack()

binär lesen -> unpack()
__________________
Code:
:(){ :|:& };:
Veritas Aequitas
GrafZahl ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Binärdatei in Perl schreiben
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Perl - Sockets ChiefWiggum Code Kitchen 4 15.07.10 10:42
Perl 5.10 - Tk keksinat0r Linux/UNIX 3 05.04.08 18:48
Sendkeys in Perl? Mr.Kurd Code Kitchen 3 16.07.07 21:23
BOT schreiben Fr33-Key Code Kitchen 10 22.03.06 18:39
Perl???!!! Abooya Die Problemzone 3 06.08.05 01:14


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 49 50 51 52 53 54 55 56 57 58 59 60 61