Também disponível em: English · Español · Français · العربية
Conversor de punycode
Descodifique domínios xn-- para ver as letras que realmente dizem, codifique no sentido inverso e veja de que alfabetos um nome se serve.
O que é o punycode
Os nomes de domínio, tal como viajam na rede, só podem conter letras de a a z, algarismos e hífenes. O punycode, definido na RFC 3492, é a forma de encaixar nesse alfabeto um domínio escrito em qualquer outra escrita: münchen.de passa a xn--mnchen-3ya.de, e пример.рф a xn--e1afmkfd.xn--p1ai. O prefixo xn-- marca uma etiqueta codificada assim, e o que vem a seguir é o punycode propriamente dito.
É uma peça de engenharia engenhosa. Primeiro copiam-se os caracteres ASCII e depois uma série compacta de algarismos em base 36 descreve que caracteres não ASCII há que inserir e em que posição. Nada se perde, a codificação é reversível e os nomes curtos continuam curtos.
Encontra-o sobretudo em duas situações: ou o navegador lhe mostrou uma ligação como xn--80ak6aa92e.com e quer saber o que diz de facto, ou tem um domínio na sua própria escrita e precisa da forma ASCII para um ficheiro de configuração, um certificado ou um registo DNS. Esta ferramenta faz as duas coisas, inteiramente no seu navegador.
Como usar
- Escolha a direcção de que precisa. De punycode para Unicode converte um domínio xn-- de volta em letras. De Unicode para punycode vai ao contrário, para quando precisa da forma ASCII.
- Cole o domínio. Servem domínios inteiros e não apenas etiquetas soltas: cada parte entre pontos é convertida separadamente, exactamente como o DNS a trata.
- Veja a decomposição por etiquetas e a lista de alfabetos. Cada etiqueta aparece com o seu resultado, portanto vê qual delas levava a codificação. Por baixo listam-se as escritas usadas, com um aviso se alguma etiqueta misturar mais do que uma.
O navegador faz uma direcção e recusa a outra
Vale a pena saber, porque explica porque existem ferramentas como esta. Todos os navegadores trazem dentro uma implementação completa de punycode, e a partir de JavaScript consegue chegar a uma parte dela: construir um URL a partir de münchen.de devolve um nome de anfitrião xn--mnchen-3ya.de. A direcção de codificação sai de graça.
A inversa não está disponível. Dê ao mesmo analisador xn--mnchen-3ya.de e ele devolve-o igual, o que é correcto, porque já é um nome de anfitrião válido e não há razão para lhe tocar, mas significa que a plataforma não lhe vai dizer o que diz um domínio codificado. E essa é justamente a direcção de que precisa quem está a olhar para uma ligação suspeita, portanto tem de ser implementada e não pedida emprestada. Esta página implementa a RFC 3492 por inteiro, verificada contra os dezanove vectores de teste que a própria norma publica.
Dois nomes que parecem o mesmo e não são
A razão de o punycode importar para além da curiosidade é que é assim que se regista um domínio impostor. Um a latino e um а cirílico são caracteres diferentes que quase todos os tipos de letra desenham igual. Escreva apple.com com o cirílico e codifica-se como xn--pple-43d.com: um domínio completamente diferente que, na barra de endereços, se vê praticamente como o verdadeiro.
A verificação que os navegadores fazem é se uma mesma etiqueta mistura escritas, e esta ferramenta mostra-lhe o mesmo. Um nome com uma letra cirílica no meio de latinas é assinalado. Mas essa verificação tem um buraco que convém perceber: uma etiqueta escrita inteiramente com sósias cirílicos é texto coerente de um só sistema, portanto passa. Várias letras cirílicas parecem-se o suficiente com as latinas para escrever palavras inteiras. O aviso de mistura é um sinal útil e não uma garantia, e esta página di-lo em vez de deixar entender que a ausência de aviso significa segurança.
Há mais duas surpresas na própria codificação. O ß alemão é um de um punhado de caracteres cujo significado mudou entre as duas versões da norma IDNA: com as regras antigas faß.de era transformado em fass.de e eram o mesmo domínio, ao passo que com as actuais faß.de codifica-se como xn--fa-hia.de e são dois registos diferentes. E em grego, pôr um domínio em maiúsculas e voltar a minúsculas não devolve o domínio de partida, porque um Σ final passa a ς e não a σ, portanto ΣΊΣΥΦΟΣ.gr e σίσυφος.gr não são o mesmo nome.
Limites honestos
Isto converte punycode; não lhe diz se um domínio é perigoso. Um nome pode ser perfeitamente vulgar na sua escrita, e um nome pode ser ASCII puro e mesmo assim ser um sítio de phishing. O que a ferramenta lhe dá são as letras e as escritas, que é informação que a barra de endereços não mostra e que é genuinamente útil, mas o juízo é seu.
A detecção de escritas é deliberadamente grosseira. Cobre latino, grego, cirílico, han, árabe e hebraico, que são os intervalos que contam para a confusão de que esta página trata, e tudo o resto é rotulado como Outro em vez de adivinhado. Algarismos, hífenes e sinais contam como Comum e nunca fazem sozinhos com que um domínio pareça misturado.
Há ainda uma camada acima do punycode que esta ferramenta não impõe. A IDNA2008 tem regras sobre que caracteres podem sequer aparecer num domínio, e os navegadores acrescentam restrições próprias; a maioria dos registos nem lhe venderia um nome com mistura de escritas. Portanto um domínio que esta página converte sem problemas pode ser um que nenhum registrador aceitaria. E ao contrário: um navegador codifica coisas que a norma proíbe, como um domínio com emoji, ou um hífen no princípio ou no fim.
Por fim, a descodificação é feita por etiqueta. Se um nome não trouxer o prefixo xn--, passa tal como está, porque não há maneira de distinguir um punycode sem marca de uma palavra normal que por acaso o pareça.
Porque é grátis
Porque não custa nada manter. A conversão acontece no seu navegador à medida que escreve; nada é enviado, nada é registado e nenhum servidor vê os domínios que cola, o que aqui conta mais do que o costume, já que a própria razão para usar esta página pode ser não confiar na ligação que lhe mandaram.
Nem conta, nem registo, nem nada guardado atrás de um. O algoritmo é a RFC 3492 tal como foi publicada, verificada contra os dezanove vectores de teste da própria norma e contra uma implementação de referência independente.