/ / Dans Node JS, comment convertir une valeur de hachage sous la forme d'un uuid égal à Cast As Uniqueidentifier de TSQL - node.js, tsql, uuid

Dans Node JS, comment convertir une valeur de hachage en uuid égale à l'identificateur de cast as unique de TSQL - node.js, tsql, uuid

Nous avons un processus créant des uuid "s dans TSQL utilisant les éléments suivants:

SELECT Cast( HASHBYTES("MD5", "some string") as uniqueidentifier)

J'ai créé une API dans le nœud js, et ils veulent que jeêtre capable de créer le même identifiant unique en dehors de "une chaîne". Est-ce possible? En utilisant crypto, je peux obtenir la même valeur hexadécimale que la commande HASHBYTES (crypto.createHash("md5").update("some string").digest("hex")), mais je ne sais pas comment je le convertirais au même message renvoyé par TSQL.

Je crois que ce que je veux est un v3 uuid, mais je nesavoir ce que serait l'espace de noms. Je pensais que SSMS utilisait peut-être une valeur spécifique au serveur pour créer l'uid, mais j'ai pu obtenir la même valeur sur trois serveurs différents, deux sur notre réseau et un autre sur une instance EC2 aléatoire.

Est-ce que je comprends mal quelque chose de très fondamental sur uuid "s? Ou existe-t-il un espace de noms spécifique à Microsoft SQL Server, cohérent entre tous les serveurs?

Les librairies de nœuds que j’ai extraites: uuid, uuid-1345, uuid-lib, guid

J'ai aussi essayé la bibliothèque Aguid, qui semblefais ce que je veux mais dans SHA256. J'ai emprunté le code et l'ai passé à md5, mais j'ai ensuite constaté que tout ce que faisait la bibliothèque prenait un hachage et ajoutait un 4 ou un 8 à certains index de caractères.

Réponses:

0 pour la réponse № 1

Un ami a compris comment TSQL gère les casts comme identifiant unique. Ils viennent de réorganiser les caractères du hachage! Voici comment vous le faites en Javascript:

var castAsUuid = function(str){ var x = str.substring(6, 8) + str.substring(4, 6) + str.substring(2, 4) + str.substring(0, 2) + "-" + str.substring(10, 12) + str.substring(8, 10) + "-" + str.substring(14, 16) + str.substring(12, 14) + "-" + str.substring(16, 20) + "-" + str.substring(20, 32)

retourne x.toUpperCase () }

Ils semblent le faire de la même manière à chaque fois (ils ont essayé environ dix chaînes différentes). Bon temps.