이렇게 사용하세요
원본 칸에 코드를 붙여 넣고 방식을 고르면 결과가 바로 만들어져요. 결과 코드를 원래 스크립트 자리에 그대로 넣으면 똑같이 동작해요. 문자 코드 방식은 만들 때마다 다른 무작위 키를 쓰니, "새 키로 다시 만들기"를 누르면 겉모습이 다른 결과를 얻을 수 있어요. 원본에 문법 오류가 있으면 입력칸 아래에 알려 드려요.
세 가지 방식의 원리
- 문자 코드 코드의 글자 하나하나를 숫자로 바꾸고, 무작위 키와 XOR 연산을 한 번 더 해서 숫자 배열로 만들어요. 실행할 때 숫자를 다시 글자로 바꿔
eval로 실행해요. - Base64 코드를 UTF-8 바이트로 바꾼 뒤 Base64 문자열로 인코딩하고,
atob으로 풀어 실행해요. 한글이 있으면TextDecoder로 UTF-8을 복원해요. 결과가 가장 짧아요. - 유니코드 이스케이프 모든 글자를
a같은 이스케이프로 적은 문자열을 실행해요. 편집기에서 검색해도 원래 단어가 잡히지 않아요.
세 방식 모두 원본 코드를 한 글자도 바꾸지 않고 포장만 하기 때문에 실행 결과가 원본과 같아요. 대신 크기는 문자 코드 방식이 원본의 4~5배, 유니코드 방식이 6배쯤으로 커져요.
자주 묻는 질문
이걸로 코드를 보호할 수 있나요?
아니요. 결과 코드의 eval을 console.log로 바꾸기만 해도 원본이 그대로 보여요. 소스를 잠깐 훑어보는 사람을 막는 정도로만 생각하고, 중요한 로직과 비밀 값은 서버에 두세요.
결과가 실행되지 않는 사이트가 있어요.
Content-Security-Policy에서 unsafe-eval을 막은 사이트에서는 eval이 동작하지 않아요. 또 import와 export를 쓰는 모듈 코드는 eval 안에서 실행할 수 없으니 일반 스크립트에만 쓰세요.
입력한 코드가 서버로 전송되나요?
아니요. 변환은 모두 브라우저 안에서 이루어지고, 입력한 코드를 실행하지도 않아요.