Isaac is correct. Date.now is pretty guessable from a security standpoint and so is Math.random. I was suggesting it for cases where that's not an issue. On Aug 6, 2012 8:11 PM, "Isaac Schlueter" <i...@izs.me> wrote:
> That looks like I was responding to Mark Hahn's commnet about sorting; I > wasn't. > > Of course it's fine to put the date on there *also*, but my point is > merely that (Date.now() + Math.random()) is not sufficiently random to > call it a uuid. > > On Mon, Aug 6, 2012 at 6:09 PM, Isaac Schlueter <i...@izs.me> wrote: > > Math.random() is not cryptographically secure entropy, and Date.now() > > is extremely guessable. If you are worried about someone *wanting* to > > cause collisions, then that's not so great. > > > > If you don't care about the IETF, and you are writing your program in > > Node, then the simplest approach is something like: > > > > var uuid = crypto.randomBytes(24).toString('base64') > > > > To do it asynchronously (since the crypto ops are a little slow): > > > > crypto.randomBytes(24, function (er, bytes) { > > var uuid = bytes.toString('base64') > > }) > > > > Make the number bigger or smaller to adjust the amount of entropy. > > > > Note that IETF uuids are "only" 16 bytes of entropy, so if you do want > > IETF-style uuids, you can do this: > > > > var uuid = crypto.randomBytes(16).toString('hex') > > var ietfStyle = uuid.replace(/^(.{8})(.{4})(.{4})(.{4})(.{12})$/, > > '$1-$2-$3-$4-$5') > > > > I'm going to be moving npm to just use base64 random bytes for salt > > eventually, just never got around to it. > > > > > > On Mon, Aug 6, 2012 at 4:02 PM, Mark Hahn <m...@hahnca.com> wrote: > >> The advantage of starting off with the time is that the UUIDs sort by > order > >> generated which is useful for DB ids. Coding a time into base 36 is a > bit > >> dangerous though as it may not sort right at some time in the future. > That > >> time may be centuries from now, not sure. Sorting by hex is known to > be far > >> in the future. > >> > >> > >> On Mon, Aug 6, 2012 at 3:56 PM, Mark Hahn <m...@hahnca.com> wrote: > >>> > >>> FWIW, here is the code to exactly match couchdb. > >>> > >>> UUID = -> '0' + (new Date().getTime() * 1e3).toString(16) + > >>> Math.floor(Math.random() * 1e18).toString(16) > >>> > >>> > >>> On Mon, Aug 6, 2012 at 3:43 PM, Rick Waldron <waldron.r...@gmail.com> > >>> wrote: > >>>> > >>>> On Mon, Aug 6, 2012 at 6:28 PM, Mark Hahn <m...@hahnca.com> wrote: > >>>>> > >>>>> That isn't a hack. It is almost a copy of what couchdb offers. I > use > >>>>> it all the time. > >>>> > >>>> > >>>> One is an IETF (RFC) and the other isn't. > >>>> > >>>> http://www.ietf.org/rfc/rfc4122.txt > >>>> > >>>>> > >>>>> > >>>>> On Mon, Aug 6, 2012 at 2:17 PM, Ted Young <t...@radicaldesigns.org> > >>>>> wrote: > >>>>>> > >>>>>> Thanks for the feedback, glad to know I found the defacto solution. > >>>>>> Tim, that's funny, your hack is more or less what I started with, > but I > >>>>>> became suspicious that it was too easy somehow. Maybe I'll switch > back to > >>>>>> that if file-size/performance becomes an issue (which it won't). > >>>>>> > >>>>>> Ted > >>>>>> > >>>>>> On Aug 6, 2012, at 8:27 PM, Tim Caswell <t...@creationix.com> wrote: > >>>>>> > >>>>>> Depending on how strict your requirements are, I often just use: > >>>>>> > >>>>>> Date.now.toString(36) + "-" + (Math.random() * > >>>>>> 0x10000000).toString(36) > >>>>>> > >>>>>> Date.now is unique every ms and Math.random has a keyspace of 2^32, > so > >>>>>> collisions are statistically impossible in most practical > >>>>>> applications. > >>>>>> > >>>>>> > >>>>>> On Mon, Aug 6, 2012 at 1:01 PM, Rick Waldron < > waldron.r...@gmail.com> > >>>>>> wrote: > >>>>>> > >>>>>> > >>>>>> On Monday, August 6, 2012 at 1:38 PM, Martin Cooper wrote: > >>>>>> > >>>>>> On Mon, Aug 6, 2012 at 10:28 AM, Ted Young <t...@radicaldesigns.org> > >>>>>> wrote: > >>>>>> > >>>>>> Hey y'all, > >>>>>> > >>>>>> So, I have a need for global unique id's. Googling about, I've found > >>>>>> the > >>>>>> following implementations that seem decent: > >>>>>> > >>>>>> https://github.com/broofa/node-uuid > >>>>>> > >>>>>> > >>>>>> FWIW, this is the package that npm uses. > >>>>>> > >>>>>> +1 > >>>>>> > >>>>>> I've been using Robert Keiffer's impl in projects since before it > was > >>>>>> even > >>>>>> on npm—I consider it a "go to" > >>>>>> > >>>>>> Rick > >>>>>> > >>>>>> > >>>>>> -- > >>>>>> Martin Cooper > >>>>>> > >>>>>> > >>>>>> https://gist.github.com/1308368 > >>>>>> > >>>>>> Not really sure why I would pick one over the other (besides file > >>>>>> size), or > >>>>>> if there are any js-specific issues I should be aware of. Any > advice? > >>>>>> > >>>>>> Cheers, > >>>>>> > >>>>>> Ted > >>>>>> > >>>>>> -- > >>>>>> Job Board: http://jobs.nodejs.org/ > >>>>>> Posting guidelines: > >>>>>> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines > >>>>>> You received this message because you are subscribed to the Google > >>>>>> Groups "nodejs" group. > >>>>>> To post to this group, send email to nodejs@googlegroups.com > >>>>>> To unsubscribe from this group, send email to > >>>>>> nodejs+unsubscr...@googlegroups.com > >>>>>> For more options, visit this group at > >>>>>> http://groups.google.com/group/nodejs?hl=en?hl=en > >>>>>> > >>>>>> > >>>>>> -- > >>>>>> Job Board: http://jobs.nodejs.org/ > >>>>>> Posting guidelines: > >>>>>> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines > >>>>>> You received this message because you are subscribed to the Google > >>>>>> Groups "nodejs" group. > >>>>>> To post to this group, send email to nodejs@googlegroups.com > >>>>>> To unsubscribe from this group, send email to > >>>>>> nodejs+unsubscr...@googlegroups.com > >>>>>> For more options, visit this group at > >>>>>> http://groups.google.com/group/nodejs?hl=en?hl=en > >>>>>> > >>>>>> > >>>>>> -- > >>>>>> Job Board: http://jobs.nodejs.org/ > >>>>>> Posting guidelines: > >>>>>> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines > >>>>>> You received this message because you are subscribed to the Google > >>>>>> Groups "nodejs" group. > >>>>>> To post to this group, send email to nodejs@googlegroups.com > >>>>>> To unsubscribe from this group, send email to > >>>>>> nodejs+unsubscr...@googlegroups.com > >>>>>> For more options, visit this group at > >>>>>> http://groups.google.com/group/nodejs?hl=en?hl=en > >>>>>> > >>>>>> > >>>>>> -- > >>>>>> Job Board: http://jobs.nodejs.org/ > >>>>>> Posting guidelines: > >>>>>> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines > >>>>>> You received this message because you are subscribed to the Google > >>>>>> Groups "nodejs" group. > >>>>>> To post to this group, send email to nodejs@googlegroups.com > >>>>>> To unsubscribe from this group, send email to > >>>>>> nodejs+unsubscr...@googlegroups.com > >>>>>> For more options, visit this group at > >>>>>> http://groups.google.com/group/nodejs?hl=en?hl=en > >>>>>> > >>>>>> > >>>>>> -- > >>>>>> Job Board: http://jobs.nodejs.org/ > >>>>>> Posting guidelines: > >>>>>> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines > >>>>>> You received this message because you are subscribed to the Google > >>>>>> Groups "nodejs" group. > >>>>>> To post to this group, send email to nodejs@googlegroups.com > >>>>>> To unsubscribe from this group, send email to > >>>>>> nodejs+unsubscr...@googlegroups.com > >>>>>> For more options, visit this group at > >>>>>> http://groups.google.com/group/nodejs?hl=en?hl=en > >>>>> > >>>>> > >>>>> -- > >>>>> Job Board: http://jobs.nodejs.org/ > >>>>> Posting guidelines: > >>>>> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines > >>>>> You received this message because you are subscribed to the Google > >>>>> Groups "nodejs" group. > >>>>> To post to this group, send email to nodejs@googlegroups.com > >>>>> To unsubscribe from this group, send email to > >>>>> nodejs+unsubscr...@googlegroups.com > >>>>> For more options, visit this group at > >>>>> http://groups.google.com/group/nodejs?hl=en?hl=en > >>>> > >>>> > >>>> -- > >>>> Job Board: http://jobs.nodejs.org/ > >>>> Posting guidelines: > >>>> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines > >>>> You received this message because you are subscribed to the Google > >>>> Groups "nodejs" group. > >>>> To post to this group, send email to nodejs@googlegroups.com > >>>> To unsubscribe from this group, send email to > >>>> nodejs+unsubscr...@googlegroups.com > >>>> For more options, visit this group at > >>>> http://groups.google.com/group/nodejs?hl=en?hl=en > >>> > >>> > >> > >> -- > >> Job Board: http://jobs.nodejs.org/ > >> Posting guidelines: > >> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines > >> You received this message because you are subscribed to the Google > >> Groups "nodejs" group. > >> To post to this group, send email to nodejs@googlegroups.com > >> To unsubscribe from this group, send email to > >> nodejs+unsubscr...@googlegroups.com > >> For more options, visit this group at > >> http://groups.google.com/group/nodejs?hl=en?hl=en > > -- > Job Board: http://jobs.nodejs.org/ > Posting guidelines: > https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines > You received this message because you are subscribed to the Google > Groups "nodejs" group. > To post to this group, send email to nodejs@googlegroups.com > To unsubscribe from this group, send email to > nodejs+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/nodejs?hl=en?hl=en > -- Job Board: http://jobs.nodejs.org/ Posting guidelines: https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines You received this message because you are subscribed to the Google Groups "nodejs" group. To post to this group, send email to nodejs@googlegroups.com To unsubscribe from this group, send email to nodejs+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/nodejs?hl=en?hl=en