0

次の投稿で作成されたダウンロードトークンを復号化する方法を理解しようとしていますhttps://stackoverflow.com/a/4324115/487892

public static string GetDownloadToken(int fileId)
{
    byte[] idbytes = BitConverter.GetBytes(fileId); // 4 bytes 
    byte[] dateTimeBytes = BitConverter.GetBytes(DateTime.Now.ToBinary()); // 8 bytes
    byte[] buffer = new byte[16]; // minimum for an encryption block 
    string password = "password";

    byte[] passwordBytes = Encoding.ASCII.GetBytes(password);
    Array.Copy(idbytes, 0, buffer, 0, idbytes.Length);
    Array.Copy(dateTimeBytes, 0, buffer, idbytes.Length, dateTimeBytes.Length);
    byte[] encryptedBuffer = new byte[256]; 
    using (SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider())
    {
        int count = sha1.TransformBlock(buffer, 0, buffer.Length, encryptedBuffer, 0);
        return Convert.ToBase64String(encryptedBuffer, 0, count);
    }
}

私の主な関心は、日付を元に戻して現在の日付と比較し、一定期間後にトークンを期限切れにできるようにする方法です。これは一方向ハッシュを行っていませんか?

4

1 に答える 1

4

ここでの「暗号化」は実際には暗号化ではなく、「ハッシュ」です。暗号化を使用すると、暗号化(データを読み取り不能にする)と復号化(データを再び読み取り可能にする)を行うことができます。

ハッシュを使用すると、プロセスを元に戻すことはできません。つまり、ハッシュ関数(この場合はsha1.TransformBlock(..))によって計算された値から元のデータを取得することはできません。

本当に復号化機能を使用して暗号化したい場合は、別のメカニズムを使用する必要があります。つまり、ハッシュ関数ではありません。

詳細情報を提供する非常に詳細なSOリンクは次のとおりです。ハッシュアルゴリズムと暗号化アルゴリズムの基本的な違い

私にはあなたの選択肢は次のように思われます:

  1. ハッシュアルゴリズムの代わりに暗号化アルゴリズムを使用する
  2. 日付/時刻オブジェクトとして「encryptedBuffer」をメンバーとして含むオブジェクトタイプを返すようにメソッドを変更します
于 2012-09-19T18:45:01.803 に答える