UUID 버전 4 생성
17247 단어 UUIDcryptoJavaScript
그렇게 간단하기 때문에 스스로 쓰기도 쉽다.
실제로 자바스크립트로도 써봤어요.
UID 생성 코드 설치 예 1
class UUID {
static #uuidIte = ( function* () {
const HEXOCTETS = Object.freeze( [ ...Array(256) ].map( ( e, i ) => i.toString( 16 ).padStart( 2, "0" ).toUpperCase() ) );
const VARSION = 0x40;
const VARIANT = 0x80;
for (;;) {
const bytes = crypto.getRandomValues( new Uint8Array( 16 ) );
yield "" +
HEXOCTETS[ bytes[ 0 ] ] +
HEXOCTETS[ bytes[ 1 ] ] +
HEXOCTETS[ bytes[ 2 ] ] +
HEXOCTETS[ bytes[ 3 ] ] + "-" +
HEXOCTETS[ bytes[ 4 ] ] +
HEXOCTETS[ bytes[ 5 ] ] + "-" +
HEXOCTETS[ bytes[ 6 ] & 0x0f | VARSION ] +
HEXOCTETS[ bytes[ 7 ] ] + "-" +
HEXOCTETS[ bytes[ 8 ] & 0x3f | VARIANT ] +
HEXOCTETS[ bytes[ 9 ] ] + "-" +
HEXOCTETS[ bytes[ 10 ] ] +
HEXOCTETS[ bytes[ 11 ] ] +
HEXOCTETS[ bytes[ 12 ] ] +
HEXOCTETS[ bytes[ 13 ] ] +
HEXOCTETS[ bytes[ 14 ] ] +
HEXOCTETS[ bytes[ 15 ] ];
}
} )();
static randomUUID() {
return this.#uuidIte.next().value;
}
}
consle.log( UUID.randomUUID() ); //xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
무작위 수Math.random
도 얻을 수 있지만 암호의 강도에 있어서crypto.getRandomValues
는 더욱 안전하다.또 바이트열이어서 표현도 간결해졌다.
그러나 의외로 사용
crypto.getRandomValues
된 글은 다음과 같은 내용만 찾았다.JavaScript의 1행 세그먼트 서브셋
아마 비밀번호 강도보다'충돌 위험이 없는 아이디를 단순히 만들고 싶다'는 말이 대다수일 것이기 때문에 사용
Math.random
해도 위험성이 적겠죠.다음은 사용
Math.random
의 실시례도 설명한다.UID 생성 코드 설치 예제 2
class UUID {
static #uuidIte = ( function* () {
const HEXOCTETS = Object.freeze( [ ...Array(256) ].map( ( e, i ) => i.toString( 16 ).padStart( 2, "0" ).toUpperCase() ) );
const VARSION = 0x40;
const VARIANT = 0x80;
for (;;) {
const uint32 = new Uint32Array( 4 ).fill( Math.random() * 0x100000000 >>> 0 );
yield "" +
HEXOCTETS[ uint32[ 0 ] & 0xff ] +
HEXOCTETS[ uint32[ 0 ] >>> 8 & 0xff ] +
HEXOCTETS[ uint32[ 0 ] >>> 16 & 0xff ] +
HEXOCTETS[ uint32[ 0 ] >>> 24 & 0xff ] + "-" +
HEXOCTETS[ uint32[ 1 ] & 0xff ] +
HEXOCTETS[ uint32[ 1 ] >>> 8 & 0xff ] + "-" +
HEXOCTETS[ uint32[ 1 ] >>> 16 & 0x0f | VARSION ] +
HEXOCTETS[ uint32[ 1 ] >>> 24 & 0xff ] + "-" +
HEXOCTETS[ uint32[ 2 ] & 0x3f | VARIANT ] +
HEXOCTETS[ uint32[ 2 ] >>> 8 & 0xff ] + "-" +
HEXOCTETS[ uint32[ 2 ] >>> 16 & 0xff ] +
HEXOCTETS[ uint32[ 2 ] >>> 24 & 0xff ] +
HEXOCTETS[ uint32[ 3 ] & 0xff ] +
HEXOCTETS[ uint32[ 3 ] >>> 8 & 0xff ] +
HEXOCTETS[ uint32[ 3 ] >>> 16 & 0xff ] +
HEXOCTETS[ uint32[ 3 ] >>> 24 & 0xff ];
}
} )();
static randomUUID() {
return this.#uuidIte.next().value;
}
}
실행 속도를 비교하면 사용crypto.getRandomValues
이 Math.random
보다 훨씬 빠르다.실행 환경에 따라 달라질 수 있지만 방법을 고려하면 어느 환경이든 대체로 같은 결과가 나올 수 있을 것이다.
Reference
이 문제에 관하여(UUID 버전 4 생성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/37cohina/items/40d3e8188670cbd3dd1e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)