Keep in mind that obfuscation isn't security, so the answer really depend on 
your goal.  Are you concerned about auto-incrementing integer IDs being 
sequential in REST urls?  If so, use named slugs or UUIDs from 
django-extensions.  UUIDs aren't obfuscated from a security perspective (they 
can be deduced), but sufficient for most purposes to make sequencing not 
obvious.  You can also use the M2Crypto library to generate a random token and 
use that to add a home-grown access key.  The snippet below isn't complete, but 
hopefully gives you an idea.

.... models.py --

import M2Crypto
from django_extensions.db import fields as extensions

class Foo(models.Model):

    uuid = extensions.UUIDField(
        editable=False,
        help_text="Automatically generated globally unique ID.")

    token = models.CharField(
        help_text="Automatically generated authorization token",
        max_length=255,
        editable=False, default=None, blank=True, null=True)

    def save(self, *args, **kwargs):
        """ set the authorization token on first save """
        if not self.id:
            self.token = base64.urlsafe_b64encode(
                M2Crypto.m2.rand_bytes(16))
        super(Foo, self).save(*args, **kwargs)

-- views.py --

from django.views.generic import DetailView

class FooTokenView(DetailView):

    def get_object(self):
        object = get_object_or_404(Foo,
                                   uuid=self.kwargs['uuid'],
                                   token=self.kwargs['token'])
        return object

---


Brian Schott
[email protected]



On May 27, 2012, at 11:14 AM, Marcin Tustin wrote:

> Why would you want this? Arbitrary integers are already completely opaque.
> 
> On Sun, May 27, 2012 at 4:12 PM, forrest yang <[email protected]> wrote:
> Just try to convert the increasing numeric id in the database to some other 
> obfuscated id. 
> The lib need to support long type integer range conversion and convert in two 
> directions.
> Is there are some id obfuscate libs in django or widely used in django 
> community?
> 
> Any one knows that?
> 
> Thanks
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Django users" group.
> To view this discussion on the web visit 
> https://groups.google.com/d/msg/django-users/-/0lkBciSL24MJ.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> For more options, visit this group at 
> http://groups.google.com/group/django-users?hl=en.
> 
> 
> 
> -- 
> Marcin Tustin
> Tel: 07773 787 105
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Django users" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> For more options, visit this group at 
> http://groups.google.com/group/django-users?hl=en.

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to