質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.21%

暗号化が正常にできているかがわからない

解決済

回答 4

投稿

  • 評価
  • クリップ 1
  • VIEW 1,241

JustinDover

score 6

C#でファイルの内容をAES256暗号化し、別のファイルに書き出すツールを作っています。
暗号化自体は正常に終了しているのですが、これが「AES256/CBC」できちんと暗号化されているか=正解かがわかりません。

OpenSSLなどがあればコマンドラインから出来そうですが、あいにくJAVAもPHPも入れられません。
どこかにブラウザからか、Windowsツールで「キー、IVが指定出来てAES256/CBCのファイル暗号化」が出来るツールはないでしょうか。

ちなみにコードは以下の感じです。

                // ファイルサイズ取得
                FileInfo file = new FileInfo(files[i]);
                long size = file.Length;

                // 読み込み領域メモリ確保
                byte[] readBuff = new byte[size];

                // 暗号化領域メモリ確保
                byte[] angoBuff = new byte[size];

                // ファイル読み込み
                //ファイルを開く
                System.IO.FileStream fsR = new System.IO.FileStream(
                    files[i],
                    System.IO.FileMode.Open,
                    System.IO.FileAccess.Read);

                //ファイルの内容をすべて読み込む
                fsR.Read(readBuff, 0, readBuff.Length);

                //閉じる
                fsR.Close();

                // 暗号化
                AesManaged Aes = new AesManaged();

                // 暗号化用設定
                Aes.BlockSize = 128;         // 128bit
                Aes.KeySize = 128;           // 128bit
                Aes.Mode = CipherMode.CBC;
                Aes.Padding = PaddingMode.PKCS7;
                Aes.Key = System.Text.Encoding.ASCII.GetBytes(@"1234567890ABCDEF");
                Aes.IV = System.Text.Encoding.ASCII.GetBytes(@"FEDCBA0987654321");

                // 暗号化
                ICryptoTransform encryptor = Aes.CreateEncryptor(Aes.Key, Aes.IV);

                // 暗号化した情報を暗号化領域に書き込む
                angoBuff = encryptor.TransformFinalBlock(readBuff, 0, (int)size);

                // 書き込みファイル名生成
                // ファイル名だけ切り出し
                String FileName = System.IO.Path.GetFileName(files[i]);

                // 書き込みフルパス名組み立て
                String WriteFullPath = System.IO.Path.Combine(Dest_TextBox.Text, FileName);

                // ファイル書き込み
                System.IO.FileStream fsW = new System.IO.FileStream(
                    WriteFullPath,
                    System.IO.FileMode.Create,
                    System.IO.FileAccess.Write);
                //バイト型配列の内容をすべて書き込む
                fsW.Write(angoBuff, 0, (int)angoBuff.Length);
                //閉じる
                fsW.Close();
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m.ts10806

    2019/11/26 14:15

    特に前提や背景が抜けていると本来の目的にそったアドバイスは得られません。
    回答者にとっては質問本文に書いてあることが全てです。各回答に散っているのを拾い集めるのもそれなりに負荷が高いです

    キャンセル

  • JustinDover

    2019/11/26 14:20

    はい。申し訳ありません。

    キャンセル

  • m.ts10806

    2019/11/26 14:34

    質問は編集できますので適宜調整してください

    キャンセル

回答 4

+2

一番確実なのはOpenSSL(ライブラリではなくコマンド)のプリコンパイル済みを導入する
次点が、msys2/cygwinにてopensslを導入する になるかと思います。

変わり種が、Git for WindowsのGit bashからopensslを利用する事です。

opensslコマンドについては、調べれば使い方がでてきます。

gitも導入できないのであればブラウザからweb crypt apiを使うことになります。


追記
IPAのATR-01-Bによると、テストデータにはNISTのAESAVSに記載されてるテストベクタを用いる。
となっています。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/11/26 14:37

    リファレンスとして、自作ではない、既知の、信頼のおける実績のあるツールも使って復号化を検証すべきだと考えます。その意味でも高評価させていただきました。

    キャンセル

  • 2019/11/26 14:48 編集

    そりゃ難儀な環境ですね。
    そうなると仕様に厳密にやるとSP800-38A( https://csrc.nist.gov/publications/detail/sp/800-38a/final )
    に載っているテストデータを用いる事になりそうです

    キャンセル

  • 2019/11/26 14:56

    参考にさせていただきます。
    ありがとうございます。

    キャンセル

+1

復号化するものも作って、正常に復号できれば暗号化出来ていたことになるのでは?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/11/26 14:13

    回答ありがとうございます。
    復号化は他の人が別の言語で作っていまして、そのテスト用に確実なデータを提供したいのです。

    キャンセル

  • 2019/11/26 14:42

    自作部分はそれはそれで存在しても良いと思いますが、もし暗号化/復号化のどちらにも不具合があった場合に、検証作業においてどう切り分けるんでしょうか。

    キャンセル

  • 2019/11/26 15:04

    切り分けの意味もあって、正確な暗号化後が取れるサイトやツールが欲しかったのです。
    サイトやツールで得られた結果と同じなら自作暗号化は正常動作してますし、違ってるなら自分が間違っていると考えられるからです。

    キャンセル

checkベストアンサー

0

異なる言語を使用した検証では、オプションパラメータを確認したくなるはずなので、自前で用意したほうが良いと思います。

heroku あたりに適当に環境を作ってみては?
コード残す必要がないのであれば、paiza.io でも良いかも。

参考:
PHPのOpenSSL関数を利用して暗号化する例

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/11/26 13:23

    元コードだと Aes.KeySize = 128; だから AES-128-CBC になってますよ?
    それと AES-256-CBC の結果を比較したら、そりゃ全然違うでしょうね。

    キャンセル

  • 2019/11/26 13:30

    おぉw確かに。
    見てませんでした。指摘ありがとう。
    どっちが正しいんだろ。

    キャンセル

  • 2019/11/26 14:16

    なるほど。
    Aes.KeySize = 256;
    でないと、AES256/CBCでは処理されないということですか。
    ありがとうごじます。

    キャンセル

0

質問するより検索した方が早いのでは?

ググったら、こんなんでましたけど。
短い文で、複合して検証してみては、どうでしょうか?

AES/256/EBC 暗号化・復号化ツール

結果が違う場合、元のコードが悪いのかツールが悪いのかは確認できないですが・・・

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/11/26 12:53

    ありがとうございます。
    最初にぐぐって、ご紹介のWebは発見していましたがEBCですしIVも指定できなかったもので。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.21%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る