HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
1209
メイトリクス少佐このプログラムのおかしいところを教えてください3未解決


メイトリクス少佐

リンク

2015/12/9(Wed) 23:29:51|NO.73537

文字列暗号化ソフトをちょっと作ってみたのですが、復号化部分がうまくいきません。
暗号化アルゴリズムは

文字コード化した原文の二乗/パスワード(整数値)
です
以下ソースコード

*start screen 0,300,400 *setver sdim genbun,6000 password=0000 *setobj mes "暗号化する文字列を入力":mesbox genbun,300,300 mes "パスワードを入力(4ケタ)":input password,300,20 mes "" button "暗号化",*task stop *task versize=strlen(genbun) textcode=0 repeat versize textcode+=peek(genbun,cnt) loop code1=textcode*textcode code2=code1\password code3=code1|password code=""+code2+"X"+code3+" dialog code *decodeg decode1=code2*password+code3 decode=sqrt(decode) sdim hukugou versize=strlen(hukugou) repeat versize out=peek(decode,cnt) poke hukugou,cnt,out loop dialog hukugou



この記事に返信する


Sado

リンク

2015/12/10(Thu) 01:04:03|NO.73539

暗号化についての知識は皆無なのですが、かじった程度の知識で回答します。
なのであまり参考にならないかもです…


・暗号化の処理が二文字以上や、2バイト文字(全角)に対応していない。
2文字以上の文字コードを足してしまったら、取り出すことは不可能!
A(65)+A(65)=???(130)
???(130)=...
なので、一文字一文字配列変数に入れていくのが一番簡単で手っ取り早いかも。
また、peek命令では1byteしか読み込めないので、全角は無理。→wpeek

・復号化の処理で、文字コードを文字に置換していない
val = cnvwtos(p1)
charactor = cnvwtos(out);みたいな



Sado

リンク

2015/12/10(Thu) 01:19:04|NO.73540

配列を用意しなくても
genbun="abcdefg"
とあるものを

genbun="abcdefg"
code="a";peekして
ecode=str(65*65/pass);計算したらすぐに文字列型に変換
angou+=ecode

angou="1234567"
ecode="1";peekして
;複合の計算と、文字列への置換
code="a"
hukugou+=code

とすることで、取り出すことが可能になりますね。
一文字一文字をごちゃごちゃにせずに、簡単に切り分けられるようにすると、操作が楽になります。
あとは、angouをテキストデータに保存したり、バイナリ保存、RGB置換で画像に保存したり。



注意点としては、工夫なしだと、
ecodeの値が256(256=$ff(16進数)=1byte)を突破して、
1byte文字として扱えなくなってしまいます。
そういう時は、暗号文字だけ2byte文字として扱ってしまえばいいわけです!

あってるかな…



KA

リンク

2015/12/10(Thu) 06:11:51|NO.73541


*task versize=strlen(genbun) textcode=0 repeat versize textcode+=peek(genbun,cnt) ;バイト単位で全文の合計 loop code1=textcode*textcode ;合計の2乗 code2=code1\password ;パス(1000〜9999)で割った余り code3=code1|password ;下4桁分をOR code=""+code2+"X"+code3+" dialog code *decodeg decode1=code2*password+code3 ;余りにパスをかけてORを足す decode=sqrt(decode) ;√ sdim hukugou versize=strlen(hukugou) repeat versize out=peek(decode,cnt) poke hukugou,cnt,out loop dialog hukugou
途中までコメントを付けたけど、なにか変だよ?
ちなみに2乗出来るのは、結果が符号付き32ビットまでです。



ONION software Copyright 1997-2023(c) All rights reserved.