dポイントプレゼントキャンペーン実施中!

画像(jpg)⇒暗号⇒文字列(txt)⇒復号⇒画像(jpg)をやりたい。

画像を文字列で取得して、
それを以下のURLの暗号メソッドを使用して
http://dobon.net/vb/dotnet/string/encryptstring. …
変換した文字列をテキストで保管する。

そして、逆に先程のテキストを文字列で取得して、
先程のURLの復号メソッドを使用して、
変換した文字列をjpgで保管する。

これがやりたいのですが、
暗号する前と、暗号した後で変換される文字列が違ってしまいます。

画像とかは、テキストで開けるから普通に文字列として扱って問題ないのかな
と思っているのですが・・・なんで違ってくるのかが分かりません。
ちなみに、URLのメソッド(暗号/復号)は普通の文字列での動作は確認が取れています。

自分がこれ原因かな~って思うと子は以下の通りです。
・復号したファイルをファイルストリームで拡張子jpgにしている為、
 画像ファイル作成時にしなければいけない処理が抜けている?
・読み込んだ文字列を一度テキストに書き込んでいる際に、何かしら文字コード関係で
 不具合が生じている。
・というか元々文字列で処理してjpgを暗号しようなんて無理

こんな私に助け舟を!!

・・・忘れていました。言語はC#です。

ご回答の程よろしくお願い致します。

A 回答 (2件)

最初の「画像を文字列で取得して、」のくだりが良くわかりません。


JPGファイルをC#で文字列型に読み込んだ
という意味ですか?
もしそうならば、最初からバイナリデータとして読み込むように変更しましょう。

> http://dobon.net/vb/dotnet/string/encryptstring. …
に掲載されているソースを拝見しますと、文字列からバイナリの取り出しに、
System.Text.Encoding.UTF8.GetBytes
をいう処理を行っています。ここで文字コード変換がかかっているかもしれません。

あるいは、一度ファイルに書き出す際に、文字として表現できないデータが失われているのかもしれません。

バイナリ・ファイルを読み書きするには?[C#、VB] - @IT
http://www.atmarkit.co.jp/fdotnet/dotnettips/669 …
    • good
    • 0
この回答へのお礼

色々調べた結果、System.Convert.ToBase64というのにたどり着きました。
以下が画像を文字列で読み込んで、書き込みを行なうサンプルです。

//Base64で文字列に変換するファイル
string inFileName = @"test.jpg";
System.IO.FileStream inFile;
byte[] bs;

//ファイルをbyte型配列としてすべて読み込む
inFile = new System.IO.FileStream(inFileName,
System.IO.FileMode.Open, System.IO.FileAccess.Read);
bs = new byte[inFile.Length];
inFile.Close();

//Base64で文字列に変換
string base64String = System.Convert.ToBase64String(bs);


//バイト型配列に戻す
byte[] bs = System.Convert.FromBase64String(base64String);

outFileName = @"test2.jpg";
//ファイルに書き込む
System.IO.FileStream outFile = new System.IO.FileStream(outFileName,
           System.IO.FileMode.Create, System.IO.FileAccess.Write);
outFile.Write(bs, 0, bs.Length);
outFile.Close();

あとは文字列に変換した『base64String』を暗号して復号して、
バイト型配列に戻して、画像を作成しましたが、ちゃんと表示されました。

お世話になりました。
ご回答ありがとうございました。

お礼日時:2010/11/07 20:24

jpegなどのデータをそのまま文字列として扱うことは不適切です。


文字として存在しないデータや、文字として扱うと特殊な意味を持つデータがほぼ確実に含まれています。

どうしても文字列の暗号化をしたいのであれば、
まず最初にバイナリデータを文字データに変換する事が必要です。
    • good
    • 0
この回答へのお礼

バイナリで作ってもと思ったのですが・・・やはり文字列でできないか考えました。

で、色々調べた結果。。。

System.Convert.FromBase64が解決してくれました。


ご回答の程ありがとうございました。

お礼日時:2010/11/07 20:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!