zesda
zesda

Reputation: 418

Simple string-based one-way hashing algorithm for JavaScript

I've been searching around for a simple-lightweight hashing algorithm for JavaScript. I did find this numerically-based answer on Stack Overflow here.

Unfortunately, I am unable to use this since it's numerically based and I'll need to use this hash as a unique index elsewhere in my code. Often this function returns negative numbers and that would be a big no-no (try 'hello world!'.hashCode() from the snippet linked above to see what I mean).

I've been tempted to use the md5 hashing libraries out there for JS but they're simply to bulky for my purpose and encryption libraries (such as this) are overkill.

It's worth noting that the information within this hash isn't sensitive in anyway and it wouldn't necessarily matter if it was decrypted. The purpose of this function would be to simply generate fixed-length output data that acts as a shortened reference to the original data that I would pass in.

Any help, tips and comments are much appreciated :)

Upvotes: 0

Views: 3209

Answers (2)

tom
tom

Reputation: 22979

I am unable to use this since it's numerically based and I'll need to use this hash as a unique index elsewhere in my code.

Hash functions are normally numerically based and are rarely perfect (produce unique keys). I think you need something different:

function GuidGen()
{
    this.items = {};
    this.size = 0;
}

GuidGen.prototype.get = function(str)
{
    if (!(str in this.items))
    {
        this.items[str] = this.size++;
    }
    return this.items[str];
}

// usage:
id = new GuidGen();
id.get("hello world");  // 0
id.get("spam");         // 1
id.get("eggs");         // 2
id.get("hello world");  // 0

Upvotes: 0

user2497624
user2497624

Reputation: 159

The solution proposed by Kooilnc, to use the absolute value, should do the tric for you. However, if you want to use a hashing function to generate a reference, i assume that the reference you get should be unique as to match the exact element it was generated from. If this is the case, be aware of collisions. Hashing function can create hashes that are similar even though the original messages are different and we call this a collision. If i remember correctly, SHA-1 is also available for java script and is not all that bulk. Good luck

Upvotes: 0

Related Questions