HSP Source

■暗号化(テキスト方法) HSP3.0以降用です

;以下ソースです。(暗号化)=======================================================
sdim data,2500
sdim data2,2500*2
data2=""
datasize=0
src=0
dst=0
data="暗号化したい文章orデータをここに読み込みます"

dialog "暗号化\n元の文章:"+data

datasize=strlen(data) ;dataのサイズを調べる

repeat datasize,0
  src=peek(data,cnt) ;変数dataのcntのところをsrcへ読み込む
  ;暗号化アルゴリズム=========
  dst=($12+(src^dst2))^$b6 ;計算式(元の文>暗号)
  dst=dst+256&255 ;変数dstが255をオーバーしないようにする。
  ;=========================

  ;数値>16進数(2文字)に変換
  dst2=dst  ;暗号鍵用のバッファ
  dst=int(dst)

  data2=data2+strf("%02x",dst)
loop

dialog "暗号化\n暗号化された文章:"+data2

;復元する。====================================================================
datasize=0
src=0
dst=0
dst2=0
data=""
hexstr="0123456789AaBbCcDdEeFf" ;16進数の文字列
;暗号化の復元なので前に暗号化したdata2を使用

dialog "復元\n暗号化されている文章:"+data2

datasize=strlen(data2) ;data2のサイズを調べる

repeat datasize/2,0
  dst=strmid(data2,cnt*2,2) ;変数data2のcntのところをdstへ読み込む
  ;16進数を10進数に変換-------
  src=0:tmp=0 ;変換結果用の変数
  repeat 2
    tmp2=strmid(dst,cnt,1)
    tmp=instr(hexstr,0,tmp2)
    if tmp>10:tmp=tmp/2+5
    src=src*16+tmp ;srcに追加
  loop

  dst=0:dst=src ;変換結果をdstに移動
  ;-------------------------
  ;暗号化アルゴリズム=========
  src=((dst^$b6)-$12)^dst2 ;計算式(暗号>元の文)
  scr=scr+256&255 ;変数scrが255をオーバーしないようにする。
  dst2=dst  ;暗号鍵用のバッファ
  ;=========================

  poke data,cnt,src ;変数srcを変数dataのcntのところへ書き込む
loop
data=strmid(data,0,datasize/2)  ;バッファ内の余分なデータを削除

dialog "復元\n復元された文章:"+data

stop

解説:
 さて、先ほどのファイルの暗号化でも文字列は暗号化できるけど....
 テキストデータとしては保存できないじゃないか!!!ってときがあるので一様書いておきます。
 (実際にバイナリ式で暗号化したものをbsave命令などで保存して、メモ帳などで開いてみてください。
  文字化けしていると思います。)
 暗号化アルゴリズムの部分はまったく変わりませんが、バイナリ扱いだった文字列をわざわざ、テキスト
 データに戻して暗号化しています。(変換しているところは緑色にしています。)

 なお、これは変数dataの中にある文字列を変数data2へ暗号化します。
 (テキストで書き込むため暗号化後のサイズは暗号化前の2倍です。
 なぜなら、1byteを数値で表すと「0x00〜0xff」でこれをそのままテキストにすると2文字(00〜ff)になるからです。)