1

最初に言っておきましょう....はい、ここ2日間でたくさんの投稿を読みました。いいえ、私は暗号化について何も知らないので、気にしないでください...あなたは火のコメントで遊ぶべきではありません..

asp.net MVC3 アプリケーションがあり、ユーザーが各ユーザーのキーを使用してアップロードする写真を暗号化したいと考えています。このキーを保存し、同じユーザーによるさらなるアップロードと復号化に使用したいと考えています。(ただし、代わりに各写真のキーを保存できると思いますが、この問題にはあまり関係ありませんが...)

ここのコードから始めました: http://www.codeproject.com/Articles/33344/Photo-Video-Viewer-with-Encryption-Capability

それは正常に動作します。写真を暗号化し、それらを新しいファイルに復号化します。すべて問題ありません。「オンザフライ バージョン」も機能し、WebImage に使用できる MemoryStream を返します。ただし、ご覧のとおり、この例では 1 つのパスで暗号化と復号化を行っており、キーはグローバル変数です (それが何であるかはわかりません。テスト時に自動生成されたキーを使用しただけです。

したがって、生成されたキー (および IV だと思いますか??? enc については何も知らないと言いました...) を各ユーザーのデータベースに保存し、その (それらの) 値を取得する方法を教えてくれる人が必要ですオンザフライの復号化に使用するためにバックアウトします。上記のサイトにあるものとほとんど同じであるため、すべてのコードをまだ投稿するつもりはありません。

ここで別の投稿を読んだところ、使用するように言われました:

string x = Convert.ToBase64String(RMCrypto.Key);

次に、復号化したいときに使用しました:

RMCrypto.Key = Convert.FromBase64String(x);

この方法でキーと IV の両方を SQL DB に保存しましたが、値を取得して復号化しようとすると、データが期待される長さではないというエラーが表示されます。

たぶん、私は完全にベースから外れているか、3行のコードである可能性があります...さらに情報が必要な場合はお知らせください。

ありがとう!

4

2 に答える 2

0

実際のバイト配列 (はい、キーと IV の両方) をデータベースに格納する必要があります。
文字列はまったく必要ありません。

于 2012-07-19T21:55:53.083 に答える
0

これらは、バイナリ列の値として格納できます。そうは言っても、暗号化されたデータの保護は、それを保護するキーと同じくらい安全です. 言い換えれば、あなたが保護するデータと一緒に鍵を保管することは、鶏舎を守るキツネ​​のようなものです。しかし、PCI コンプライアンスなどについて心配していないのであれば、おそらくそれほど悪い取引ではないでしょう。

バイナリに変換する方法

private void UpdateDb(byte[] key, byte[] iv)
{
    using (SqlConnection db = new SqlConnection(connectionString))
    using (SqlCommand cmd = new SqlCommand("insert into (key, iv) values (@key, @iv)", db))
    {
        db.Open();
        cmd.Parameters.AddWithValue("@key", key);
        cmd.Parameters.AddWithValue("@iv", iv);
        cmd.ExecuteNonQuery();
    }

}

少し難しくするために、保護するレコード (画像) ごとに新しいキーと IV を生成し、それを保存して、誰かが少なくとも 1 つのキーを取得したとしても、すべてのデータが広く公開されないようにすることができます。幸運を!

于 2012-07-20T02:36:36.880 に答える