• ベストアンサー

暗号化 復号化

今、簡単な暗号化のプログラムを作っています。 $a = $in{"honbun"}; $b = $in{"pass"}; $c = length($in{"honbun"}); $n = 0; while ($n < $c){ $k = substr($a,$n,1); $d = chr(ord($k) + $b); print "$d"; $n++; } pass文だけ、コード値をずらしているのですが、 基準のコード値より大きい数になってしまった場合、 どのように修正してやればよいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.2

No.1 のつづきです。 暗号文字列中に印字不能文字が現れて困るなら、とっても面倒な処理が必要です。 (コード表に無い数値をスキップせにゃなりません) 私は知りませんが、面倒を見てくれるモジュールを探す方が良いでしょう。 出力が暗号バイナリ列で良いなら、 $maxchr を 0xff にしたらどうでしょう? Perlのバージョンや use してるモジュールによっては binmode(STDOUT) を追加したり、 ord/chr を pack/unpack に変更が必要かも。

その他の回答 (1)

  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.1

# 先頭に追加 $minchr = 0x20; # 許可する最小文字 $maxchr = 0x7e; # 許可する最大文字 $width = $maxchr - $minchr + 1; # 1行置換 $d = chr((ord($k) + $b - $minchr) % $width + $minchr);

tobi-u-o
質問者

お礼

結局1バイトずつ書き出しているから、 日本語にならなかったんですね。 2バイトやスペースの判定など、 よろしかったら教えてください。

tobi-u-o
質問者

補足

ちなみに、2バイト文字でもこの方法で 可能でしょうか?

関連するQ&A