2016-11-01 12 views
-4

私は、起動時にサーバーからファイルをダウンロードするC#で書かれたWindowsデスクトップアプリケーション(WPF)に取り組んでいます。これらのファイルは、アプリケーションを動作させる上で大きな役割を果たします。フライ暗号を実装する方法

これらのファイルの内容をAESなどの暗号化の形式で保護したいと考えています。これらのファイルは、アプリケーションによって読み取られた場合でも暗号化されたままでなければなりません。そこで私は、アプリケーションがアクセスしているときにそのファイルを復号化する方法を探しています。言い換えれば、アプリケーションだけがファイルを理解することができますが、ユーザーが他のプログラムで開くと、暗号化されます。

実装に関するいくつかのアイデアや記事を共有できれば幸いです。ありがとう!

編集1: アプリケーション毎の起動時にサーバーからダウンロードされていることにHTML/JS/CSSファイルを閲覧するCefSharpを利用します。

編集2:私はTrueCryptののようなものを実装しようとしています。

編集3: TrueCryptができることをやりたい。これはファイルを暗号化し、暗号化されたファイルは、ファイルが開かれるたびに即座に解読するため、通常はどのプログラムからでも開くことができます。アプリケーションの組み込みブラウザ(CefSharp)によって読み込まれたHTML/JS/CSSファイルを保護したいので、これが必要です。

答えて

0

.NET FrameworkのSystem.Security.Cryptography Namespaceを使用する必要があります。 Herehereの2つの例があります。

注:最初に、ファイルバイトまたはSystem.IO.File.ReadAllBytesを使用して、ファイルAS BYTES []の内容を読み取る必要があります。 KEYを実装する必要があります。つまり、アプリケーションにハードコードされており、デコンパイラを使用して見つけることができます。 したがって、ユーザーがデータを読み取ることを妨げることはほとんど不可能です。

+0

ご連絡ありがとうございます。私は私のポストを少し編集しました。あなたの答えは良いと思いますが、私の場合には当てはまらないかもしれません... –

+0

@GordonLuvinsky Thomasが正しいです。ユーザーがデータを読み取ることを妨げることは不可能です。あなたはサーバーの関与が必要です。この質問はほぼ毎日尋ねられ、ほとんど毎日同じ反応を受けます。 –

0

トーマス氏によると、System.Security.Cryptographyを使用することが、データを暗号化する最良の方法です。ただし、クライアントアプリケーションに暗号化キーを含める必要があります。このアプリケーションにアクセスするすべての人がキーを抽出するのは非常に簡単です。

ファイルを暗号化する時間を無駄にしない方がよいでしょう。

2

は、ユーザーがPCのようなオープンプラットフォーム上の保護されていないファイルにアクセスできないことを認識する必要があります。 DRMが何十年にも達成しようとしているのはこのことですが、この目標は定義によってunachievableです。

唯一できることは、保護されていないファイルにアクセスするのが難しくなるということですが、結局のところ、保護を回避するために十分な努力を払うことに決めた場合、常に成功します。

例えば、ソースファイルを難読化することができます(専用の難読化ツールを使用するか、単純に最小化することによって)。非標準のファイルエンコーディング(base64の逆)を使用するか、何らかの暗号化方式を使用できます。あなたの鍵も同様に発送する必要があるので、どのような安全性が確保されているかにかかわらず、どの暗号化方式でも対応します。

最後に、すでに述べたように、暗号プリミティブはSystem.Security.Cryptography名前空間にあります。ただし、セキュリティに敏感なシステムでは、ニュアンスが多く、実際にはかなり困難なので、直接使用することはお勧めしません。 SecurityDriven.Infernoのようなライブラリーを見てください。ライブラリーは安全なデフォルトで暗号プリミティブをラップします。

+0

こんにちは、あなたの答えに感謝します。私は私のポストを少し編集しました。基本的に私はTrueCryptのようなものを実装しようとしています。そうすれば、いくつかのステップを共有したり、TrueCryptのようなものを作る方法を教える記事を共有したりすることができれば幸いです。私はDRMの無駄をよく知っています。私はこのことからクライアントと話すために最善を尽くしますが、好奇心の念から、私は本当にTrueCryptのようなものを作る方法を知りたいです。 :) –

関連する問題