| Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme. |
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 ...
![]() |
| | #1 (permalink) |
| Registriert seit: 31.07.06 ![]() Likes: 32 | 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 Wie bekomme ich beliebige 8-Bit Werte in eine Datei hinein? Greetz Hackse |
| | |
| | #2 (permalink) | |
| Registriert seit: 12.08.10 ![]() ![]() Likes: 30 | Zitat:
Micha
__________________ http://www.openvas.org | |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) |
| Member of Honour ![]() Registriert seit: 28.05.10 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 210 | 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()
__________________ Code: :(){ :|:& };: |
| | |
| | #4 (permalink) |
| Themenstarter Registriert seit: 31.07.06 ![]() Likes: 32 | 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 Ideen? Geändert von Hackse (22.09.11 um 14:54 Uhr) |
| | |
| | #5 (permalink) | |
| Member of Honour ![]() Registriert seit: 28.05.10 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 210 | Zitat:
bist du sicher, dass du an dieser stelle LESEN willst? ![]() binär schreiben -> pack() binär lesen -> unpack()
__________________ Code: :(){ :|:& };: | |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ä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 |