랜덤 바이트 생성기
암호학적으로 안전한 랜덤 바이트를 9가지 형식으로 출력 — Hex, Base64, Base64URL, 이진, 10진, C 배열, Python bytes, UUID v4.
사용법
- 바이트 수 선택(1-256) — IV는 16, HMAC 키는 32, OAuth client secret은 64.
- 출력 형식 선택. 쿠키·JWT용으로는 Base64URL(패딩 없음, URL-safe).
- '생성' 버튼으로 새 값을 만들고, 옵션만 바꾸면 기존 바이트를 재포맷.
자세한 설명
펼치기접기
브라우저의 crypto.getRandomValues()로 최대 256바이트의 암호학적으로 안전한 난수를 만들고, 쓰일 곳에 맞춰 형식을 골라 줍니다. 소문자·대문자 16진수, 표준 또는 URL 안전 Base64, 이진 문자열, 10진 바이트 배열, C의 uint8_t 리터럴, 파이썬 b'...' 리터럴, 그리고 16바이트 이상을 요청했을 때의 RFC 4122 버전 4 UUID까지 있습니다. 구분자는 없음·공백·쉼표·콜론·하이픈 중에서 고를 수 있어서, MAC 주소나 인증서 지문, 혹은 설정 파일이 기대하는 형태에 맞출 수 있습니다.
중요한 구분은 난수의 출처입니다. Math.random()은 섞기나 애니메이션을 위해 만들어진 빠른 유사난수 생성기이고, 출력을 충분히 관찰한 사람에게는 예측 가능합니다. 거기서 뽑은 세션 토큰은 비밀이 아닙니다. crypto.getRandomValues()는 운영체제의 암호학적 생성기에서 값을 가져오는데, 이쪽은 하드웨어 엔트로피로 시드를 받고 과거 출력을 보아도 미래 출력에 대해 아무것도 알 수 없도록 설계돼 있습니다. 모든 비밀은 두 번째 범주에 속해야 하고, 첫 번째를 선호할 성능상의 이유도 없습니다.
몇 바이트가 필요한가는 진지한 질문이지만 답은 시시합니다. 16바이트는 128비트이고, 낯선 사람이 맞혀 보려 할 만한 모든 것에 대한 관례적 하한선입니다. 서명 키처럼 오래 쓰는 비밀에는 32바이트를 쓰세요. 인코딩은 길이를 바꿀 뿐 강도를 바꾸지 않습니다. 16바이트는 16진수로 32글자, Base64로 24글자이고 셋 다 같은 128비트를 담고 있으므로, 더 길어 보이는 문자열이 더 강한 것은 아닙니다. 경로나 쿼리 문자열에 들어갈 값이라면 표준 알파벳 대신 URL 안전 Base64를 고르는 편이 좋습니다. 거기서는 +와 /를 이스케이프해야 하고 = 패딩은 전송 중에 잘려 나가는 일이 흔하기 때문입니다.
UUID 옵션에는 사람들이 놓치는 세부가 있습니다. 버전 4 UUID는 폭이 128비트이지만 그중 무작위인 것은 122비트뿐입니다. 4비트는 버전을, 2비트는 변형을 기록합니다. 그래도 충돌을 걱정할 범위와는 한참 멀지만, 토큰의 엔트로피를 계산하고 있다면 128이 아니라 122로 세세요. 온전한 128비트가 필요하다면 UUID 대신 원시 바이트를 16진수로 가져가면 됩니다.
자주 묻는 질문
암호학적으로 안전한가요?
네. Web Crypto API의 CSPRNG인 crypto.getRandomValues()를 사용합니다. 모든 생성은 브라우저 내에서만 일어나며 바이트가 외부로 전송되지 않습니다.
왜 최대 256바이트인가요?
대부분의 보안 용도(키·토큰·salt)는 16-64바이트면 충분합니다. UI 멈춤을 방지하기 위한 상한이며, 대량 생성은 openssl rand나 head /dev/urandom을 추천합니다.
Base64와 Base64URL 차이는?
Base64는 +, /, = 패딩을 사용합니다 — JSON에는 문제없지만 URL/파일명에는 부적합. Base64URL은 +→-, /→_로 바꾸고 = 패딩을 제거합니다 — JWT, OAuth state, URL에 사용.
브라우저 탭에서 만든 키를 운영 환경에 써도 되나?
무작위성은 문제없다. 생각해야 할 것은 취급이다. 그 값은 페이지를 거치고, 클립보드를 거치고, 동료에게 가는 길에 채팅창을 지날 가능성이 크며, 운영체제가 보관하는 동기화된 클립보드 기록에도 남는다. 실제로 무언가를 지키는 비밀이라면 그것이 살아갈 곳에서 만들어라. 서버, 키 관리 시스템, 배포 파이프라인이다. 브라우저는 버릴 값에만 쓰는 게 맞다.
몇 바이트면 충분한가?
무작위 16바이트는 128비트이고, 이는 전수 대입의 사정거리 밖이며 대부분의 토큰과 키 형식이 자리 잡은 값이다. 키를 길게 해도 비용이 없는 곳에서는 32바이트가 통상적인 선택이다. 다만 길이는 모든 바이트가 무작위일 때만 도움이 된다. 외우기 좋은 문구로 만든 32바이트 값이 가진 엔트로피는 길이가 아니라 그 문구의 것이다.
이 주제의 가이드
관련 도구
UUID 생성기
무작위 버전4 UUID를 여러 개 한 번에 생성하고 복사하세요.
개발
비밀번호 생성
브라우저를 벗어나지 않는 강력한 무작위 비밀번호를 생성하세요.
랜덤
Tailwind 색상 팔레트
전체 Tailwind CSS v4 기본 팔레트 — 22가지 색상 × 11단계 음영(50~950) — Tailwind 클래스·HEX·rgb()로 클릭 복사.
색상·CSS
랜덤 색상 생성기
랜덤 색상을 HEX·RGB·HSL로 한꺼번에 생성합니다 — 개수를 고르고, 원클릭 복사, 즉시 다시 생성해 디자인 영감을 얻으세요.
랜덤
유니코드 문자 검사기
문자열을 분해해 각 문자의 코드포인트·UTF-8 바이트·HTML 엔티티·CSS 이스케이프·유니코드 블록 표시.
텍스트
DNS 메시지 디코더
DNS 패킷을 16진수나 DoH base64url로 붙여넣고 읽어 보세요. 헤더 플래그, opcode와 rcode, 모든 레코드, EDNS0 OPT 옵션까지 보여 줍니다.
네트워크