-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
javascript-bcrypt
jsBCrypt
I am using v2.2 on Linux.
To reproduce the problem, run the following code:
var b1 = new bCrypt(),
b2 = new bCrypt();
b1.hashpw('\u6e2f', '$2a$05$0000000000000000000000', function(hash1) {
console.log(hash1);
b2.hashpw('\u6f2f', '$2a$05$0000000000000000000000', function(hash2) {
console.log(hash2);
if (hash1 === hash2) {
console.log('Hash collision !!!!');
} else {
console.log('Hashes are different, as expected.');
}
});
});
The result of the code above is:
$2a$05$000000000000000000000uZFTs0iC2rTIcGXz5VM9Rg6ZA/slcl8i
$2a$05$000000000000000000000uZFTs0iC2rTIcGXz5VM9Rg6ZA/slcl8i
Hash collision !!!!
The two passwords give the same hash. I think this is because of the following
loop appearing in method bCrypt.prototype.hashpw():
for (var r = 0; r < password.length; r++) {
passwordb.push(this.getByte(password.charAt(r)));
}
This means an enormous number of hash collisions since only one of the bytes of
any multi-byte utf8 characters in a password is considered.
Original issue reported on code.google.com by nico...@nicolaspelletier.org on 14 Dec 2012 at 7:46
Reactions are currently unavailable