Java's UUID.nameUUIDFromBytes to written in JavaScript?

后端 未结 3 1891
梦谈多话
梦谈多话 2021-01-06 23:20

I have a 3rd party application that I can\'t control that uses Java\'s UUID.nameUUIDFromBytes to create a string. I need to reproduce this function written in J

3条回答
  •  耶瑟儿~
    2021-01-06 23:35

    This answer attempts to improve on the previous ones as follows

    • It includes the hyphens in the output, just like Java
    • Does not rely on additional external libraries that are not supported anymore
    const crypto = require('crypto');
    
    function javaHash(input:string) {
      let md5Bytes = crypto.createHash('md5').update(input).digest();
      md5Bytes[6]  &= 0x0f;  /* clear version        */
      md5Bytes[6]  |= 0x30;  /* set to version 3     */
      md5Bytes[8]  &= 0x3f;  /* clear variant        */
      md5Bytes[8]  |= 0x80;  /* set to IETF variant  */
      const hex = md5Bytes.toString('hex')
      const uuid = hex.replace(/(\w{8})(\w{4})(\w{4})(\w{4})(\w{12})/, "$1-$2-$3-$4-$5");
      return uuid;
    }
    

    It relies on the UUID spec being exactly 128bits in length

提交回复
热议问题