出力先ファイル名、xorする値はソース中にベタ書き。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#1byte xor use strict; our $key = pack("C*",0x33);#きちんとpackしないと結果がおかしくなる unless ($ARGV[0]) { print "usage: xorist.pl inputfilename"; } #バイナリファイル読み込み ref:http://motivation.drivendevelopment.jp/2009-06-16-1.html my $filename = $ARGV[0]; open my $file,'<',$filename or die; binmode $file; open(OUT,">xorist_out.txt") or die; binmode(OUT); my $val; while(read($file, $val, 1)){ my $byte = ($val ^ $key); print OUT $byte; } |
注意点メモ
- xor(^)の両辺は、数値なら数値、バイナリ表現ならバイナリ表現で揃える
この場合はバイナリ表現で揃えているので、0x33というxorキーはpackしている - xor(^)の両辺のデータ長も揃える
- 入出力ともにbinmodeで行う。(binmodeをつけないと、改行にあたる値が出てきたときに勝手に値が変わってファイルが壊れる)
※$keyをpackしなかったときの状態…keyの数値だけが延々と出力された