画像を暗号化して文字列に変換し、復号して画像に戻す方法

このQ&Aのポイント
  • 画像(jpg)をテキストに変換し、指定のURLの暗号メソッドを使用して変換した文字列をテキストで保存します。そして、復号の際にはテキストを取得して指定のURLの復号メソッドを使用し、変換した文字列を再び画像(jpg)に保存します。
  • しかし、暗号する前後で変換される文字列が異なる問題が発生しています。原因として、復号したファイルの拡張子をjpgにしていることや、文字列をテキストに書き込む際に文字コードの不具合が生じている可能性が考えられます。
  • 解決策としては、復号したファイルの拡張子を正しく処理することや文字コード関連の問題を修正する必要があります。また、画像をテキストとして処理する際には適切な方法で処理することが重要です。C#を使用する場合、文字列や画像の変換に適したライブラリやメソッドを活用すると良いでしょう。
回答を見る
  • ベストアンサー

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

画像(jpg)⇒暗号⇒文字列(txt)⇒復号⇒画像(jpg)をやりたい。 画像を文字列で取得して、 それを以下のURLの暗号メソッドを使用して http://dobon.net/vb/dotnet/string/encryptstring.html 変換した文字列をテキストで保管する。 そして、逆に先程のテキストを文字列で取得して、 先程のURLの復号メソッドを使用して、 変換した文字列をjpgで保管する。 これがやりたいのですが、 暗号する前と、暗号した後で変換される文字列が違ってしまいます。 画像とかは、テキストで開けるから普通に文字列として扱って問題ないのかな と思っているのですが・・・なんで違ってくるのかが分かりません。 ちなみに、URLのメソッド(暗号/復号)は普通の文字列での動作は確認が取れています。 自分がこれ原因かな~って思うと子は以下の通りです。 ・復号したファイルをファイルストリームで拡張子jpgにしている為、  画像ファイル作成時にしなければいけない処理が抜けている? ・読み込んだ文字列を一度テキストに書き込んでいる際に、何かしら文字コード関係で  不具合が生じている。 ・というか元々文字列で処理してjpgを暗号しようなんて無理 こんな私に助け舟を!! ・・・忘れていました。言語はC#です。 ご回答の程よろしくお願い致します。

  • HKKMR
  • お礼率89% (120/134)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

最初の「画像を文字列で取得して、」のくだりが良くわかりません。 JPGファイルをC#で文字列型に読み込んだ という意味ですか? もしそうならば、最初からバイナリデータとして読み込むように変更しましょう。 > http://dobon.net/vb/dotnet/string/encryptstring.html に掲載されているソースを拝見しますと、文字列からバイナリの取り出しに、 System.Text.Encoding.UTF8.GetBytes をいう処理を行っています。ここで文字コード変換がかかっているかもしれません。 あるいは、一度ファイルに書き出す際に、文字として表現できないデータが失われているのかもしれません。 バイナリ・ファイルを読み書きするには?[C#、VB] - @IT http://www.atmarkit.co.jp/fdotnet/dotnettips/669bincopy/bincopy.html

HKKMR
質問者

お礼

色々調べた結果、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』を暗号して復号して、 バイト型配列に戻して、画像を作成しましたが、ちゃんと表示されました。 お世話になりました。 ご回答ありがとうございました。

その他の回答 (1)

  • Yorisin
  • ベストアンサー率54% (364/663)
回答No.1

jpegなどのデータをそのまま文字列として扱うことは不適切です。 文字として存在しないデータや、文字として扱うと特殊な意味を持つデータがほぼ確実に含まれています。 どうしても文字列の暗号化をしたいのであれば、 まず最初にバイナリデータを文字データに変換する事が必要です。

HKKMR
質問者

お礼

バイナリで作ってもと思ったのですが・・・やはり文字列でできないか考えました。 で、色々調べた結果。。。 System.Convert.FromBase64が解決してくれました。 ご回答の程ありがとうございました。

関連するQ&A

  • PHP パラメータの暗号 復号

    PHPのパラメータを暗号化して 取得側で復号処理も行いたいのですが・・・。 いろいろなサイトをみて試していますが、暗号化された文字列に、 おそらく+(プラス)が入ると復号がうまく行きませんでした。 みなさんはどのようにされていますでしょうか? 宜しくお願いします。

    • ベストアンサー
    • PHP
  • 文字列の暗号化と復号化

    .NETで文字列を固定長に暗号化したい。(ユニコード対応できる) また、暗号化したものを復号化します。 .NETに付いている暗号化のモジュールはいくつがありますが、その以外のやり方がありましょうか? 例:何桁の平文を暗号化しでも8桁の十六進数又はBASE64の秘文になる。

  • 画像ファイルの暗号・復号化

    ゲームを作っているのですが、それに使う画像ファイルを暗号化したいです。 むき出しのままだと、所謂ネタバレ的なCGも簡単に見れてしまうので……。 自分の知識では、せいぜい拡張子を変えて誤魔化すぐらいしか出来ません。 ただ、それでは流石にみすぼらしいというか……。 分かる人なら簡単に解けてしまうようなもので構いませんので 教えて頂ければ幸いです。 ちなみに、JPEGとPNGファイルの暗号・復号化です。

  • ファイルではなく文字列を暗号化するAPIありますか

    「linuxで暗号化」などと検索すると、だいたいgnuPGとかがヒットするのですが、これらはファイル全体を暗号化/復号化するものですよね。 やりたいことは、ファイル全体を暗号化するのではなく、ファイル中の特定の場所に書かれている文字列のみを暗号化/復号化したいのですが、そのような用途で手軽に使えるAPIなどありましたら、教えて下さい。たとえば、個人情報の含まれる文書の個人情報部分だけを暗号化して、それをネットワーク上に流したりする感じです。 centos、redhatなどで使えたらうれしいです。 それほど頑強でなくていいんで、適当に作ってもいいんですが、時間がないので既存のAPIがあったらなーと。

  • 画像の暗号化について

    画像(jpg)をアタッシュケースで暗号化したいんですが、暗号化し復号化したことにより、画質の劣化などの問題は発生しますか。 早めの回答をお願いします。

  • 暗号化・復号化のアルゴリズムにはどんなものがありますか?

    Cでプログラミングを勉強しており、20文字ほどの文字列を暗号化・復号化するプログラムを考えていますが、ネットを検索しても暗号化アルゴリズムでなかなかいいものが見つかりません。 私のリクエストとしては ・暗号化対象は半角英数字、半角記号のみ。 ・単に文字コードを1つずつずらしたような簡単な暗号ではなく、複雑なアルゴリズムを使用したい。 ・アルゴリズムは複雑でもプログラムは簡潔にできるものがいい。(長くても数百行程度)。 ・アルゴリズム自体の仕様が公開されている。 ・アルゴリズムは数学式で表せるものがいい。 ・スーパーコンピュータを使わなければ解けないほど時間がかかる暗号化アルゴリズムでなくてもいい。 ・暗号化のライブラリファイルは使わず、自前で全部コードを書きたい。 ・公開鍵や秘密鍵を使わなくてもいい。 上記の条件を満たす暗号化アルゴリズムでいいものがありましたら、教えてください。 以上、よろしくお願いします。

  • 画像のテキストデータ化・暗号化について

    いつもお世話になってます。 今回は画像の暗号化と変換についておしえてください。 現在、Androidのアプリ制作をしています。 画像をテキストデータにし暗号化したものをサーバにアップロードし、それをユーザがダウンロードしたときにプログラム(Java)によって復号し、元のpng画像に変換したいのですが、その方法がいまいちわかりません。 Q1.画像pngのバイナリデータをテキストデータにするにはどうしたらいいですか? Q2.テキストデータをプログラム(?)で暗号化するにはどうしたらいいですか?(できればJavaで。 初心者なので的外れな質問があるかと思いますが、どうぞよろしくお願いいたします。

    • ベストアンサー
    • Java
  • 暗号化文字列を英数字のみにしたい

    文字列をJavaで暗号化してURLのクエリストリングに付加したいのですが、「=」「+」等の記号が含まれるとURLエンコーディングしないといけません。 こちらの都合上それを防ぎたいので、暗号化後の文字列を半角英数字のみで構成されるようにしたいのです。 いい案があればご教授ください。 尚、現在はアルゴリズムBlowfishで暗号化したバイト配列をBase64方式にてエンコードしています。 それですと記号が含まれてしまいます。

    • ベストアンサー
    • Java
  • ファイルを文字列に変換

    ファイルを文字列に変換 ファイルを文字列に変換したいです。 文字しか送れないネットワークで、ファイルを文字列に変換し、その文字列を送り、受信機でファイルに変換する装置を作りたいです。 しかし、送り方&暗号化はわかったのですが、肝心のファイル⇔文字列(16進数などでも可)ができません。 LinuxをメインPCで使ってるので、Linuxで説明していただければ幸いです。 ファイルを文字列に変換するソフトとかありますか?

  • エクセルで文字列をtxtファイルに変換すると""がつく

    テキストファイルを文字列の引用符は「なし」でエクセルの文字列で開き、加工して再びテキストファイルで保存すると、部分的に文字列に引用符("")がついてしまうのですが、この""(ダブルクォーテーション)をつけずにテキストで保存するにはどうしたらよいのでしょうか。

専門家に質問してみよう