- - PR -
VB.NETで画像ファイルのXOR暗号
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-08-23 14:17
mioさん、一郎さん返答ありがとうございます。
ビットに変換どうこうの以前の問題ですね・・・ 何も分からずトンチンカンでお恥ずかしいです。 JPGファイルをFileStreamでバイナリで読み込めばいいのでしょうか? | ||||
|
投稿日時: 2006-08-23 15:44
まずはやってみて、どうにもうまくいかなかったり、エラーが取れなかったりなら、質問しましょうよ。
それでPCが壊れるなんてことも、ないのだから。 | ||||
|
投稿日時: 2006-08-23 17:06
色々とやってみて、なんとか暗号化できました。
ですが、本来行いたい方法とは少し違います。 もともと、PHPで行っていたのと同じ方法で暗号化したかったのですが その時の暗号化シード値は「元文字列と同じ長さ分"1"で埋める」としていました。 ---PHPコードサンプル--- $fh = fopen("moto.JPG", "r"); $text = fread($fh, filesize("moto.JPG")); fclose($fh); for($i=0; $i<=strlen("moto.JPG"); $i++){ $seed .= "1"; } //XOR暗号化 $out = $text ^ $seed; ←★★★ $fh = fopen("enc.JPG", "w"); fwrite($fh, $out); fclose($fh); ---------- VB.NETでの場合、FileStreamでByte配列に読み込み XOR暗号したのですが、★★★のように 「全データ XOR 1埋め」の方法が分かりません。 どうすればよいのでしょうか? どの辺りが間違えているのか、行き詰ってしまいました。 ---VB.NETコードサンプル--- Dim strImg As String = "moto.JPG" Dim strEnc As String = "enc.JPG" Dim rBuffer() As Byte Dim wBuffer() As Byte Dim fs As System.IO.FileStream Dim fsize As Integer Dim i As Integer 'ファイルを読む fs = New System.IO.FileStream(strImg, IO.FileMode.Open, IO.FileAccess.Read) fsize = CInt(fs.Length) ReDim rBuffer(fsize - 1) ReDim wBuffer(fsize - 1) fs.Read(rBuffer, 0, fsize) 'XOR暗号化 ←★ここがよく分かりません★ For i = 0 To UBound(rBuffer) wBuffer(i) = System.Convert.ToByte(rBuffer(i) Xor "1") Next fs.Close() 'ファイルを保存 fs = New System.IO.FileStream(strEnc, IO.FileMode.Create, IO.FileAccess.Write) fs.Write(wBuffer, 0, fsize) fs.Close() | ||||
|
投稿日時: 2006-08-23 21:53
ん〜? PHP が変でしょう?文字列って何か、理解しています?文字じゃないものを、文字列として扱うことは、できないでしょ?ただのデータなのだから、0xff 等というコードも、当然含まれています。このコードに、文字は割り当てられていませんよ? さらに、「同じ長さ分の "1"」というのも、定義が非常に曖昧です。まず、「長さ」って、何の長さでしょう?上に示したように文字列ではないので、「文字列の長さ」というのは、答えとして適切ではありません。そして、"1" とは、なんでしょう?全ビットが 1 なのか、それとも "1" という文字のアスキーコードと演算するのか、不明です。 また、暗号化したものに "jpg" の拡張子をつけるのも変でしょう。この方法だと、JPEG ではないファイルができますよね?ファイルの先頭から終わりまで XOR を取っているので、JPEG としての情報を持っているヘッダを壊してしまいます。 | ||||
|
投稿日時: 2006-08-23 21:57
PHPでのXOR暗号化は下記URLの通りに行いました。
第8回 ファイルの中身を暗号化する http://itpro.nikkeibp.co.jp/article/COLUMN/20060131/228211/?ST=tech_print 同じことをVB.NETで行いたかったのですが、無理なんでしょうか? | ||||
|
投稿日時: 2006-08-23 22:44
このご時勢になんちゅうふざけた記事を… | ||||
|
投稿日時: 2006-08-23 23:34
元となる記事にて行っている事はこのような話だと読みとりました。
PHPに対してはあまり知識がないので間違っていたら申し訳ありません。 「1ビットずつのXOR演算→ビットの反転」 元々の記事ではバイト単位での変換ではなく、一括して変換しようとしたため 元データと同じバイト数のシード文字列を用意した、という事ではないでしょうか。 なお少々余談なのですが、私はDOS時代も過ごしてきた人間なので、 拡張子というのはファイル名の一部でしかなく、ファイルの種別を表しているとは限らない と思っているのですが、今のご時世ではやはり少数派なのでしょうか? [ メッセージ編集済み 編集者: Ahf 編集日時 2006-08-23 23:37 ] | ||||
|
投稿日時: 2006-08-23 23:47
Jittaさん、なちゃさん、Ahfさん 皆さんありがとうございます。
参照URLのPHPでのXOR演算の方法が?なのか分からないのですが、 やりたいことはPHPとVB.NETで同じようにJPGファイルを暗号化 (※暗号化といっても、ビューアで単純に開けなくなる程度で良かったんです) したかったのです。 皆さんから指摘された通り、XOR演算・ビット・バイナリ・・・ 基本的な部分で自分自身が分かっていないことだらけだったので 再度勉強し直して考えてみます。 ありがとうございました。 |