

画像(jpg)⇒暗号⇒文字列(txt)⇒復号⇒画像(jpg)をやりたい。
画像を文字列で取得して、
それを以下のURLの暗号メソッドを使用して
http://dobon.net/vb/dotnet/string/encryptstring. …
変換した文字列をテキストで保管する。
そして、逆に先程のテキストを文字列で取得して、
先程のURLの復号メソッドを使用して、
変換した文字列をjpgで保管する。
これがやりたいのですが、
暗号する前と、暗号した後で変換される文字列が違ってしまいます。
画像とかは、テキストで開けるから普通に文字列として扱って問題ないのかな
と思っているのですが・・・なんで違ってくるのかが分かりません。
ちなみに、URLのメソッド(暗号/復号)は普通の文字列での動作は確認が取れています。
自分がこれ原因かな~って思うと子は以下の通りです。
・復号したファイルをファイルストリームで拡張子jpgにしている為、
画像ファイル作成時にしなければいけない処理が抜けている?
・読み込んだ文字列を一度テキストに書き込んでいる際に、何かしら文字コード関係で
不具合が生じている。
・というか元々文字列で処理してjpgを暗号しようなんて無理
こんな私に助け舟を!!
・・・忘れていました。言語はC#です。
ご回答の程よろしくお願い致します。
No.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 …
色々調べた結果、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』を暗号して復号して、
バイト型配列に戻して、画像を作成しましたが、ちゃんと表示されました。
お世話になりました。
ご回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでアルファベットか数...
-
エクセルで文字列をtxtファイル...
-
Excelで指数表現しないようにす...
-
エクセルで文字列の最大値を抽...
-
C#で年月を比較する
-
Excelで3E8を3.00E+8にしない方...
-
文字列からタブコードを取り除...
-
16進数を10進数に簡単に変換す...
-
vbsからバッチファイル実行時の...
-
VBAでの Replace関数で、ワイル...
-
EXCELで=より左の文字を一括で...
-
1 OR 1=1 は どんな論理(約束事...
-
Msgboxの×が押されたとき
-
アクセスで特定の数字以外(複...
-
OpenGLを用いた文字列の表示
-
VBの「As String * 128」とは?
-
aaa.bbb.ccc という、「ドット...
-
【Teraterm】文字列と変数の連...
-
VBAを使って選択した範囲の数字...
-
【VB.NET】for each文からのINS...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
文字列からタブコードを取り除...
-
VBAでの Replace関数で、ワイル...
-
エクセルで文字列をtxtファイル...
-
エクセルで文字列の最大値を抽...
-
VBの「As String * 128」とは?
-
同一セル内に関数と文字列を同...
-
VBA2005 16進を2桁で表示したい。
-
Excelで指数表現しないようにす...
-
Excelで3E8を3.00E+8にしない方...
-
Left関数とRight関数を合わせた...
-
エクセル 数値データを桁をそ...
-
アクセスで特定の数字以外(複...
-
【Excel VBA】複数ある特定の文...
-
エクセルでセル内の文字列の最...
-
OnTime 使用時のプロシージャへ...
-
LEFT関数で文字数を指定しない...
-
VBAを使って選択した範囲の数字...
-
Msgboxの×が押されたとき
おすすめ情報