• 締切済み

文字列の暗号化と復号化

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

みんなの回答

  • junkUser
  • ベストアンサー率56% (218/384)
回答No.2

この要件ですとCRC32が該当しますが、復号できませんよ。

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.1

> 例:何桁の平文を暗号化しでも8桁の十六進数又はBASE64の秘文になる。 原理的にこれは不可能です。8桁の16進数だと32bit分の情報量しかありません。暗号化は圧縮手法ではありませんので平文も32bit(1byte文字で4文字、ユニコードだと2文字)以下でないといけません。 また圧縮を併用したとしても復号できるなら平文の情報量は暗号文のパターン(2^32)以下です。大したデータは送れないでしょう。 任意長文字列を固定長データに変換する手法としては暗号関係ではハッシュあるいはメッセージダイジェストがありますが、これはデジタル署名など原文の内容を検証するためのオプション情報を作るものでこれだけから原文を復元できることはありません。 またハッシュも通常は160bit以上のサイズがあります。 # 短すぎると総当りで衝突データが作れるので検証に使えない

zb_jiang
質問者

お礼

ご回答ありがとうございます。 やはり不可能ですね。

関連するQ&A

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

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

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

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

    • ベストアンサー
    • PHP
  • VBAで文字列を圧縮、復号したい

    以下のサイトと同じことをVBAで実現できないでしょうか? JavaScriptで文字列を圧縮する https://setchi.hatenablog.com/entry/2013/11/09/114432 元の文字列:エクセル 圧縮された文字列:U3U1VrUwUnW0UIUy3KAMJycww1jV0QkA 復号された文字列:エクセル データの復号をすることになり、エクセルで処理を行いたいと思ってます、データは圧縮された文字列Base64のようで、サイトなどで調べVBAでBase64の復号を試しましたが正しく文字列にならず、上記のサイトで試したところ正常な文字列に復号されました。これをなんとかVBAで実現したいと思っとおります、何卒、ご教授お願いします。

  • RSA暗号

    どのトピックかがいまいちわからないのでこのトピックに質問を載せさせて頂きます。 いま、大学の課題でRSA暗号をパソコンで実装する という課題に取り組んでいます。 2桁以上の素数を選んで、その素数から暗号化鍵と復号化鍵を選んでアスキーコードを暗号化するという初歩的なものなので、実用性は全くありませんが… プログラムはできたのですが 暗号化鍵と復号化鍵を生成して 暗号化を行って複合化を行うと 元の平文に戻らない鍵のペアがあるらしいのです。 そういうときってあるのでしょうか?

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

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

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

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

  • 暗号化文字列を英数字のみにしたい

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

    • ベストアンサー
    • Java
  • VBで暗号化した文字列をJavaで複合化することは可能でしょうか。

    VBで暗号化した文字列をJavaで複合化することは可能でしょうか。 (異なる言語間での暗号化/複合化は不可能でしょうか。) 現在考えているのは、BlowFishで暗号化し、BASE64でエンコードしたリクエストを送信し、 Java側でBASE64でデコードし、BlowFishで複合化することを考えています。 VBとJavaで同じ文字列を暗号化して比較してみたところ、一致しませんでした。

  • データベース接続文字列の暗号化もしくはセキュリティ対応

      ASP(VBScript)で作成されたWebアプリケーションにおいて、 インクルードファイルにデータベース接続文字列を平文で定義しています。 これがセキュリティ上問題ありとのことで、 暗号化もしくはセキュリティ対応を行わなければならなくなりました。 いろいろと調べてみましたが策が見付からずここに投稿させて頂きました。 もし常套手段や良策などを知っている方がいましたらご教授いただけるととても助かります。 宜しくお願いいたします。  

  • Blowfish の復号時の挙動について

    またお世話になりますm( __ __ )m PEAR の BlowFish を用いての暗号化、復号化についての質問です。 例えば、"hello" という文字列を暗号化します。 そして、 $_str = $_blowfish->decrypt($_crypt_str); と復号した時に、 取得した文字列 $_str は 8byte に満たない部分が \0 で埋まってきます。すなわち "hello\0\0\0" となります。 ちなみに "hello_World" を暗号化して復号すると "hello_World\0\0\0\0\0" となります。 私が調べた限りでは、8byte で割り算した余りの部分が \0 で埋められてくるという仕様?なのかバグなのからしいです。 とりあえずそのままでは使い物にならないので、 $_trim_str = rtrim($_str); として、一応期待通りの動きをしていますが、こういう安易な使い方でよろしいのでしょうか? そもそも復号文字列が 8 byte 余り部分を \0 で埋めてくるなどと言うのは私の使い方が間違っているかと疑わざるをえません。 どなたかご存知の方いましたらこの辺のモヤモヤをスッキリさせていただけませんでしょうか? ちなみに暗号化モードは CBC で、初期化ベクトルは 8 byte です。

    • ベストアンサー
    • PHP