2010-12-13 1 views
0

私はダウンロードアプリケーションを持っているので、ファイルダウンロードのリンクを暗号化して、ユーザーがファイルのIDを知らないようにしたいと思います。さらに、リンクに日付/時刻を含めて、リンクがまだ有効な場合にファイルを提供しているかどうか確認したいと思います。djangoとpythonで暗号化をリンクする

hereでも同様の質問がありますが、私は/file/encrypted_string/のようなURLをダウンロードしたいと思っていますので、文字エンコーディングに問題があります。暗号化された結果だけが含まれていれば最高です文字と数字。私はマップハッシュ<>どこかのファイルを保存したくないので、ハッシュを使用しないほうがいいです。私はそこに私のニーズを満たす良い暗号化があるかどうかわかりません...

答えて

2

同じ暗号化キーを永遠に使用しても構いません。ファイル名、日付/時刻、その他のものを含む文字列を区切り(そして/または:と同様に動作します)、次に暗号化してb64します。破損したURLを生成する通常のb64encodeではなく、urlsafe_b64encodeを使用することを忘れないでください。それは長い文字列になるでしょうが、何ですか?

私はわずかなバリエーションを使用してこれを数回しました:キーの最後の部分としていくつかのランダムな文字を追加し、それを文字列の先頭または末尾に含めます。常に同じキーを再利用するよりも安全ですデータベースマッピングの頭痛がない。あなたの鍵が十分に複雑である限り、公開されたビットは、クラッカーが自由に要求を生成できるようにはなりません。ファイルが存在しない場合

もちろん、可能であれば私は、追加のデータを格納しないことを好むだろうと言ったようまあはい、私は、知っている

+0

Pefectは、前にbase64を考えていませんでした。デコード前の文字列をUnicodeから文字列に変換することを知るために遊んでいましたが、私が探していた解決策でした! –

1

これを扱う最も簡単な方法は、各ファイルにランダムな文字列を生成し、キー文字列と実際のファイル名またはファイルID。複雑な暗号化は必要ありません。

編集: リンクの有効期限を設定するには、いつでも日付を保存する必要があります。したがって、有効期限をキーで長く保存し、期限切れのリンクをテーブルから定期的に取り出すことができます。

+0

...彼らはデコード結果を見てみましょうしないでくださいなぜなら、リンクは短時間で有効でなければならず、これにより多くのものを生成する必要があるからです(古いものであればクリーンアップする必要があります)。 –

+0

私はまだこのアプローチに行きます。私の編集を参照してください。 –

+0

また、有効期限の切れたリンクは、たとえば1日に1回しか削除できないため、期限切れの正確な時点でアクションをスケジュールする必要はありません。 – Krab

0

問題が短い文字列の暗号化と復号化のいずれかに過ぎない場合、PythonのCryptoモジュールはそれを簡単にします。

+0

私の質問に記載されている例は約... –

0

URLに任意の文字をエンコードすることができます.Djangoでは、urlencode filterを使用できます。

ただし、ランダムな文字列を生成してマッピングを保存する方が安全です。

+0

質問に記載されている例を読んだ場合は、私がしたことがわかりますが、/endcoded_string /のようなURLの文字列はGETパラメータではなく、サーバーはhttpエラー400を返します。 –

関連する問題