Codificador de caracteres de largura zero
Esconde um segredo dentro de um texto comum com caracteres Unicode invisíveis: “Hi” escondido em “Hello world” vira 18 caracteres de largura zero que ninguém vê, e a decodificação o revela. Útil para marcas d'água e aulas, mas não é criptografia. Grátis no seu navegador.
- Grátis
- Funciona no seu navegador
- Sem cadastro
- Seus dados não saem do seu aparelho
Executar grátis
Exemplo resolvido
- Chave secreta
- Hi
- Texto de cobertura
- Hello world
- Modo de cálculo
- encode
- Resultado
- Hello world
- Codificação
- zero_width
- Comprimento do segredo
- 2
- Comprimento do texto de cobertura
- 11
Caracteres de largura zero são pontos de código Unicode que não ocupam largura visível, de modo que leitores comuns não os notam enquanto analisadores e copiar e colar ainda transportam os bytes. Este codificador de caracteres de largura zero transforma uma string secreta UTF-8 em um fluxo de símbolos U+200B e U+200C enquadrado por marcadores U+200D e U+FEFF, e insere essa carga invisível no texto de capa após o primeiro caractere. A decodificação procura o mesmo quadro, reconstrói bits em bytes e devolve o segredo original. A ferramenta não é criptografia: quem conhece o esquema pode extrair a carga, portanto use-a como apoio didático, marca d'água leve ou camada de demonstração, não como fronteira de sigilo.
Como a codificação em bits de largura zero esconde um segredo à vista
O texto de capa visível permanece legível porque a carga usa apenas caracteres de formato com avanço de largura zero. O codificador primeiro converte o segredo em bytes UTF-8 e percorre cada bit do mais significativo ao menos significativo dentro de cada byte. O bit zero vira U+200B (ZERO WIDTH SPACE) e o bit um vira U+200C (ZERO WIDTH NON-JOINER).
Um marcador de início U+200D e um de fim U+FEFF envolvem esse fluxo de bits para que a decodificação ignore outros caracteres invisíveis irrelevantes no documento e ainda recupere uma carga bem definida. Como cada passo é aritmética pura de strings e bytes, o mesmo segredo e a mesma capa produzem sempre o mesmo texto esteganográfico em qualquer runtime.
Esse contrato alinha-se às explicações de sala de aula sobre esteganografia sem fingir que o canal é confidencial: ocultar com largura zero trata de invisibilidade na interface, não de resistência a um leitor motivado que inspeciona pontos de código.
Onde um codificador de largura zero se paga em produtos e ensino
Workshops de segurança e privacidade usam um codificador de caracteres de largura zero para que aprendizes colem texto esteganográfico em um chat ou documento, confirmem que a mensagem ainda parece limpa e depois a decodifiquem em um segundo passo vendo o mapa de bits no campo formula. Como a implementação é parse puro, sem tokens de modelo e sem rede de saída, a latência permanece no piso analítico e o custo fica previsível.
Prefira esta ferramenta quando a tarefa for ocultar e revelar com caracteres de formato Unicode; escolha bibliotecas criptográficas reais quando a confidencialidade sob ataque for o requisito. Documente para os usuários finais que algumas plataformas normalizam ou removem caracteres de largura zero no envio, por isso sempre faça ida e volta com decode após o canal real que importa para você.
Casos de uso
Demos de esteganografia em sala de aula
Mostre aos alunos como bits Unicode invisíveis escondem um segredo curto dentro de frases de capa comuns e depois revele-o com decode no mesmo módulo determinístico.
Marcas d'água contra vazamento de rascunhos
Incorpore um id de equipe ou de ticket como bits de largura zero em textos de marketing de amostra para atribuir colagens vazadas sem alterar o layout visível.
Perguntas frequentes
Como revelo uma mensagem oculta?
Chame com mode decode e passe a string esteganográfica como text.
Quais caracteres Unicode são usados?
O bit 0 é U+200B, o bit 1 é U+200C, o marcador de início é U+200D e o de fim é U+FEFF.
Isto é criptografia?
Não. A codificação de largura zero apenas esconde bits de leitores casuais. Quem conhece o esquema — ou inspeciona pontos de código — pode recuperar a carga. Use criptografia quando precisar de confidencialidade.
Como escondo uma mensagem em um texto?
Digite o segredo e o texto visível que servirá de capa. O segredo vira bits invisíveis, delimitados por uma marca de início e outra de fim, e é inserido logo depois do primeiro caractere da capa, que continua sendo lido do mesmo jeito.
A mensagem escondida sobrevive a copiar e colar?
Normalmente sim, porque os caracteres invisíveis viajam com o texto. Alguns aplicativos normalizam ou removem caracteres de largura zero no envio, então, depois de passar o texto pelo canal que importa, decodifique uma vez para conferir se o segredo continua lá.
Ferramentas relacionadas
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/enc/zero-width \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"mode":"encode","op":"encode"}'const res = await fetch("https://api.kit.forhosting.com/enc/zero-width", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"mode": "encode",
"op": "encode"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/zero-width",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"mode": "encode",
"op": "encode"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/zero-width", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"mode":"encode","op":"encode"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"mode":"encode","op":"encode"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/zero-width", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"mode": "encode",
"op": "encode"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.zero_width",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |
Notas técnicas
Marcadores inválidos, grupos de bits incompletos ou campos ausentes falham com invalid_input e não são cobrados.
Como a codificação em bits de largura zero esconde um segredo à vista
A decodificação inverte o caminho: localiza o primeiro marcador de início, o próximo de fim, aceita apenas U+200B e U+200C entre eles, exige que a contagem de bits seja múltiplo de oito, reagrupa bytes e decodifica UTF-8 com decodificador fatal para que fluxos corrompidos apareçam como invalid_input em vez de texto ilegível.
Contrato de entrada, modos, formato da resposta e erros
Envie mode encode ou decode. Encode exige secret não vazio (aliases message ou payload, máximo 4096 caracteres) e texto de capa não vazio (também aceito como text, input, value ou data, máximo 100000 caracteres). Decode exige text não vazio contendo uma carga enquadrada (aliases cover, input, value, data ou stego, máximo 200000 caracteres). Aliases de mode incluem hide e embed para encode, e reveal ou extract para decode; o padrão é encode quando mode é omitido. Em encode bem-sucedido o corpo inclui result (string esteganográfica), mode, encoding zero_width, secret_length, cover_length, result_length, byte_count, bit_count, zero_width_count, formula e uma mensagem curta resumindo quantos bytes UTF-8 foram ocultados. Em decode bem-sucedido o corpo inclui result e secret (a string revelada), mode, encoding, comprimentos, contagens de bits e bytes, zero_width_count, formula e uma mensagem de revelação. Campos ausentes, strings vazias, mode desconhecido, marcadores de início ou fim ausentes, caracteres que não são bits dentro do quadro, marcadores aninhados, comprimento de bits que não é múltiplo de oito ou UTF-8 inválido após montar os bits lançam invalid_input com mensagem clara em inglês. Essas falhas não consomem saldo pré-pago. Mantenha cargas modestas em widgets e fixe strings result nos testes: caracteres de largura zero são Unicode de verdade, então exemplos JSON devem preservá-los exatamente.
Onde um codificador de largura zero se paga em produtos e ensino
Equipes de QA injetam marcas d'água invisíveis em textos de marketing de amostra para detectar quando rascunhos vazam por caminhos de colagem não controlados; uma chamada API determinística a US$ 0,002 por item bem-sucedido é mais barata do que levantar um Worker sob medida para um script pontual.
Casos de integração
Checagens de CI em pipelines de colagem
Codifique um segredo conhecido em fixtures, envie-os pelo editor ou integração de chat e decodifique para verificar se os caracteres de largura zero sobreviveram ao caminho.
Perguntas técnicas
Como oculto um segredo com caracteres de largura zero?
Chame com mode encode (ou omita mode), envie secret e cover não vazios. A API devolve texto esteganográfico com um quadro U+200D…U+FEFF de bits U+200B/U+200C inserido após o primeiro caractere da capa.
Quanto custa o codificador de caracteres de largura zero?
A ferramenta do navegador é gratuita. Pedidos API usam saldo pré-pago KIT a US$ 0,002 por chamada bem-sucedida; entrada inválida não é cobrada.