0

クライアント側のアプリケーションを作成しました。現在、データを永続化するためのバックエンドを作成していますが、GUIDの実装に興味があります。

クライアント側では、次のJavaScriptを使用して一意のIDを持つSongオブジェクトを生成します。これは、このStackOverflowの投稿に基づいています。

//Based off of: https://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript
generateGuid: function () {
    var startStringFormat = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';

    var guid = startStringFormat.replace(/[xy]/g, function (c) {
        var r = Math.floor(Math.random() * 16);

        var v = c === 'x' ? r : (r & 0x3 | 0x8);

        return v.toString(16);
    });

    return guid;
},

ここで、Songオブジェクトを表すクラスをC#で定義しています。

public class Song
{
    public virtual Guid Id { get; set; }
    public virtual Guid PlaylistId { get; set; }
    public virtual int VideoId { get; set; }
    public virtual string Url { get; set; }
    public virtual string Title { get; set; }
    public virtual int Duration { get; set; }
}

そうすることで、相互作用するGuidオブジェクトの影響について疑問に思いました。localStorageにあるすべてのSongオブジェクトを取得して、それらのGuidを直接翻訳することはできますか?それらすべてを再生する必要がありますか?

4

3 に答える 3

2

Guidは一意であるため(正しく生成されている場合)、既存のIDを再利用できます。ただし、悪意のあるクライアントは、ランダムなIDだけでなく、もちろん任意のIDを送信する可能性があるため注意してください。したがって、クライアントは自分のGUID間の衝突を簡単に引き起こすことができます。すべての慈悲深いクライアントがランダムにGuidを生成する場合、悪意のあるクライアントはそれらとの衝突を引き起こすことはできません。その意味で、Guidは128ビットのパスワードのようなもので、非常に強力です。

一方、これらのGuidを生成する方法は、暗号的に安全な乱数ジェネレーターを使用していません。したがって、サーバーにAJAX呼び出しを発行して、サーバーに安全なGUIDを提供させる必要があると思います。

示されている生成アルゴリズムは、私にはファンキーに見えます。特定のパターンを維持する必要はありません。100%ランダムなコンポーネントで構成されるGUIDを生成するだけです。

于 2012-11-24T22:14:48.153 に答える
2

あなたのアルゴリズムは Math.random によって生成された擬似乱数に基づいており 、乱数ジェネレーターは現在の時間からシードされているため、衝突のリスクがあるようです。

于 2012-11-24T22:41:53.140 に答える
0

特定の状況下では、実際にこのメソッドと衝突する可能性がかなり高いようです。この質問を確認してください: JavaScript で UUID を生成するときの衝突?

于 2012-11-24T23:17:50.877 に答える