Como codificar base64 com java

Base64 é um método de codificação, cada entrada 3 bytes de 4 bytes de partida é muito comumente usado para codificar imagens ou arquivos de áudio para e-mail (embora os dias de arquivos de 7 bits de transmissão está prestes a final) e uma maneira de esconder como o sinal em um site (usuários e senhas) de "bisbilhotando". Aqui está um exemplo de como programar um codificador Base64 em Java, uma linguagem de programação para múltiplas plataformas.

Conteúdo

passos

1
Informações para o Login eo nome do arquivo
  • 2
    Comece o seu editor favorito, como "Notepad" ou "vi", E digite o código padrão, como a declaração de classes e constantes. Nomeie o arquivo como Base64.java.
  • 3
    Estes valores constantes são específicos, como indicado no artigo, nos RFC (chamadas de função remotas por sua sigla em Inglês) relevante. Em geral, é uma boa prática. leia todas as RFCs antes de iniciar um código.
  • público classe Base64 {privado estático final corda base64code = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"+ "abcdefghijklmnopqrstuvwxyz" + "0123456789" + "+ /"-privado estático final int splitLinesAt = 76-
    • Trate personagens bytes, significa que os personagens "multibyte"Como o japonês ou chinês, eles não vão ser codificados corretamente. Portanto, devemos usar os getBytes () de String para converter caracteres Unicode em bytes antes de iniciar a codificação. Mas, por exemplo, se você estiver trabalhando com um documento japonês e está situado em Americana Inglés local, você terá que especificar localidade para getBytes de saída () e getBytes ("UTF-8".)
    • Iremos investigar quantos bytes de preenchimento são necessários. O módulo operador de Java,% ajuda muito nesta situação. Nós também irá declarar o nome sub-rotina e parâmetros enquanto estamos no assunto.
    • Agora vamos usar esse valor como nulo o bloco de entrada. Note que se você não precisa de preenchimento, não tem que adicionar, pois levou o módulo 3 para o segundo tempo, convertendo a 3 em um 0.


    público estático byte ZeroPad(int comprimento, byte bytes) {byte acolchoado = novo byte- // É inicializado a zero com JVM sistema.arraycopy(bytes, 0, acolchoado, 0, bytes.comprimento)-retorno acolchoado-}público estático corda codificar(corda corda) {corda codificado = ""-byte stringArray-tentar {stringArray = string.getBytes("UTF-8")- // Use o código correto corda! } captura (exceção ignorados) {stringArray = string.getBytes()- // Usado como localidade padrão em vez de coaxar }int paddingCount = (3 - (stringArray.comprimento % 3)) % 3-stringArray = ZeroPad(stringArray.comprimento + paddingCount, stringArray)-
    • Agora, se o que preocupa-nos Pack 3 bytes de cada vez em um inteiro de 24 bits, em seguida, extrair índices cadeia de código de 6 bits. Estes números não são mágicos: 24 é dividido entre 6 exatamente 4 vezes, e 6 bits pode conter valores de 0 a 63, o que pode indexar qualquer valor na cadeia de caracteres de 64 bytes.
    para (int Eu = 0- Eu lt; stringArray.comprimento- Eu += 3) {int j = ((stringArray & 0xff) lt; lt; 16) +((stringArray & 0xff) lt; lt; 8) +(stringArray & 0xff)-codificado = codificado + base64code.charAt((j gt; gt; 18) & 0x3f) +base64code.charAt((j gt; gt; 12) & 0x3f) +base64code.charAt((j gt; gt; 6) & 0x3f) +base64code.charAt(j & 0x3f)-}
    1. Finalmente, nós embalamos a saída depois dele, inserindo as CRLFs nos respectivos limites de 76 byte, usando uma sub-rotina separada para maior clareza.
    retorno splitlines(Codificado.substring(0, Codificado.comprimento() - paddingCount) +"==".substring(0, paddingCount))-}público estático corda splitlines(corda corda) {corda linhas = ""-para (int Eu = 0- Eu lt; string.comprimento()- Eu += splitLinesAt) {linhas += string.substring(i, matemática.min(string.comprimento(), Eu +splitLinesAt))-linhas += " r n"-}retorno linhas-}
    1. 1
      Podemos, se desejar, adicione uma rotina principal para fins de teste. Esta é geralmente uma boa idéia antes de postar seu código para o consumo público.


    público estático vazio principal(corda args) {para (int Eu = 0- Eu lt; args.comprimento- Eu++) {sistema.errar.println("codificação "" + args + """)-sistema.fora.println(codificar(args))-}}
    1. 1
      Aqui está o módulo de acabamento:
    público classe Base64 {privado estático final corda base64code = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"+ "abcdefghijklmnopqrstuvwxyz" + "0123456789" + "+ /"-privado estático final int splitLinesAt = 76-público estático byte ZeroPad(int comprimento, byte bytes) {byte acolchoado = novo byte- // Inicializado a zero com JVM sistema.arraycopy(bytes, 0, acolchoado, 0, bytes.comprimento)-retorno acolchoado-}público estático corda codificar(corda corda) {corda codificado = ""-byte stringArray-tentar {stringArray = string.getBytes("UTF-8")- // Use o código correto corda! } captura (exceção ignorados) {stringArray = string.getBytes()- // Usado como localidade padrão em vez de coaxar }// Determina quantos bytes de preenchimento deve ser adicionado à saída int paddingCount = (3 - (stringArray.comprimento % 3)) % 3-// Adiciona o preenchimento necessário entrada stringArray = ZeroPad(stringArray.comprimento + paddingCount, stringArray)-// processo de 3 bytes de cada vez, produzindo saídas seriais 4 bytes // Insere preocupar com CRLF depois para (int Eu = 0- Eu lt; stringArray.comprimento- Eu += 3) {int j = ((stringArray & 0xff) lt; lt; 16) +((stringArray & 0xff) lt; lt; 8) +(stringArray & 0xff)-codificado = codificado + base64code.charAt((j gt; gt; 18) & 0x3f) +base64code.charAt((j gt; gt; 12) & 0x3f) +base64code.charAt((j gt; gt; 6) & 0x3f) +base64code.charAt(j & 0x3f)-}// Substitui preenchimento nulo codificado com "=" retorno splitlines(Codificado.substring(0, Codificado.comprimento() -paddingCount) + "==".substring(0, paddingCount))-}público estático corda splitlines(corda corda) {corda linhas = ""-para (int Eu = 0- Eu lt; string.comprimento()- Eu += splitLinesAt) {linhas += string.substring(i, matemática.min(string.comprimento(), Eu + splitLinesAt))-linhas += " r n"-}retorno linhas-}público estático vazio principal(corda args) {para (int Eu = 0- Eu lt; args.comprimento- Eu++) {sistema.errar.println("codificação "" + args + """)-sistema.fora.println(codificar(args))-}}}


    1. 1
      Agora vamos compilá-lo usando javac, gcj, jikes, ou como- e testes, usando o artigo Hobbes Wikipedia:
    $ gcj -C Base64.Java$ Java Base64 "O homem é distinto, não só por sua razão, mas por singularpassion this de outros animais, o que é um desejo da mente, para que por aperseverance de prazer na ofknowledge contínuo e infatigável geração, Excede a curto veemência de qualquer prazer carnal."

    Aqui está o resultado:

    codificação "O homem é distinto, não só por sua razão, mas por singularpassion this de outros animais, o que é um desejo da mente, para que por aperseverance de prazer na ofknowledge contínuo e infatigável geração, Excede a curto veemência de qualquer prazer carnal."TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=
    1. 1
      Corresponde exatamente! Isso significa que os dois programas são más, ou ambos são mais ou menos bem. Neste ponto, você pode querer visitar novamente o artigo Wikipedia e leia as ligações RFC para ver se está faltando alguma coisa.

    dicas

    • Você não sente que você sempre tem que entender uma coisa antes de codificar. As coisas se tornam mais clara à medida que avança.
    • Durante a leitura da RFC relevante é necessário para a produção de código, a sobrecarga de informação pode ser esmagadora, por vezes, a melhor maneira é quebrar o código para o que você entende, e depois de volta para verificar ponto de funcionalidade por contagem de pontos as exigências do RFC.
    • Java é muito bem como uma linguagem de propósito geral, e para dispositivos como telefones celulares pode ser a única opção para programadores- mas a sintaxe de javascript ou Python você pode parecer mais conciso e poderoso. Todas as diferentes línguas têm os seus próprios pontos fortes e fracos.
    • Tente escrever o código de método complementar para este módulo!
    Artigos Relacionados