2011-07-09 26 views
2

奇妙な質問のビット。私は、古典的なASPのいくつかのページを持っているWebサイト、ASP.netの他のWebサイトを持っています。古典的なASP乱数とC#乱数の照合

私はグラフト画像をキャッシュするスクリプトを持っています。これは、次のいずれかの場所で、クッキーレスドメインでホストされています。

http://static1.scirra.net 
http://static2.scirra.net 
http://static3.scirra.net 
http://static4.scirra.net 

ページは私のASP.netサイト上でグラバターを要求すると、それは静的サーバーにランダムにそれを配布し、この機能を通過します:ウェブサイトの私のクラシックASP部品で

/// <summary> 
/// Returns the static url for gravatar 
/// </summary> 
public static string GetGravatarURL(string Hash, int Size, int AuthorID) 
{ 
    Random rndNum = new Random(AuthorID); 
    int ServerID = rndNum.Next(0, 4)+1; 

    string R = "//static" + ServerID.ToString() + ".scirra.net/avatars/" + Size + "/" + Hash + ".png"; 
    return R; 
} 

機能である:

function ShowGravatar(Hash, AuthorID) 

    Dim ServerID 

    Randomize(AuthorID) 
    ServerID = Int((Rnd * 4) + 1) 

    ShowGravatar = "//static" & ServerID & ".scirra.net/avatars/" & intGravatarSize & "/" & Hash & ".png" 

end function 

それはうまく動作し、それはユーザーID上にシードをつけて、静的なサーバーにサーバーのアバターを割り当てます。唯一の問題は、C#と従来のASP RNGの結果が異なることです!これは、同じイメージが最大2つの異なるドメインに配信されるため、キャッシュには最適ではありません。

これは簡単な方法ですか?

予測可能な値を返す乱数生成器は、ハッシュと呼ばれる
+2

脇役として:電子メールを公開してからgravatarを使用しないようにしてください。多くのウェブサイトはそのようにユーザーに嘘をつきます。 – CodesInChaos

+0

@Codeinchaos、どういう意味ですか?ハッシュは基本的には正式なものではありませんか? –

+1

多くの電子メールアドレスは低いエントロピーであり、推測することができます。たとえば、私はグラバターハッシュからSOの電子メールアドレスの> 20%を得ることができましたが、より多くの計算能力とより良い電子メール生成アルゴリズムにより、より高いパーセンテージが可能になります。 – CodesInChaos

答えて

3

- 予測可能なランダムだから

:-)乱数生成器では全く冷却されていないが、いくつかのハッシュ関数によりランドへの呼び出しを交換しますすべて設定されています。あなたの想像力を使ってください:ハッシュ関数は、authoridのcrcのモジュロ4と同じくらい単純なものかもしれません。

+0

偉大な答え! Mod 4 + 1はうまく機能しているようです:D –

3

サーバを特定するためにgravatarハッシュを使用してみませんか?たとえば、グラバターハッシュの最初の文字をモジュロ4とすることができます。