Pergunta

Eu já ouvi pessoas falando sobre "base 64 codificação" aqui e ali. O que é usado para?

Foi útil?

Solução

Quando você tem alguns dados binários que você quer enviar através de uma rede, você geralmente não fazê-lo por apenas streaming dos bits e bytes sobre o fio em um formato raw. Por quê? porque alguns meios de comunicação são feitas para streaming de texto. Você nunca sabe - alguns protocolos podem interpretar os dados binários como caracteres de controle (como um modem), ou seus dados binários poderia ser asneira porque o protocolo subjacente pode pensar que você entrou em uma combinação de caracteres especiais (como como FTP traduz linha terminações).

Assim, para contornar esta situação, as pessoas codificar os dados binários em caracteres. Base64 é um desses tipos de codificações.

Por que 64?
Porque você pode geralmente contar com os mesmos 64 caracteres estando presente em muitos conjuntos de caracteres, e você pode estar razoavelmente confiantes de que os seus dados de vai acabar do outro lado do fio não corrompido.

Outras dicas

É basicamente uma forma de codificação de dados binários arbitrários em texto ASCII. Leva 4 caracteres por 3 bytes de dados, além de, potencialmente, um bit de enchimento no final.

Essencialmente cada uma 6 bits de entrada é codificado em um alfabeto de 64 caracteres. O alfabeto "padrão" usa A-Z, um-z, 0-9 e + e /, com = como um caractere de preenchimento. Existem variantes de URL-safe.

Wikipedia é um razoavelmente boa fonte de mais informações.

Base-64 codificação é uma forma de obtenção de dados binários e transformando-o em texto para que seja mais facilmente transmitido em coisas como dados de formulários HTML e-mail e.

http://en.wikipedia.org/wiki/Base64

É uma codificação textual de dados binários em que o texto resultante tem nada além de letras, números e os símbolos "+", "/" e "=". É uma maneira conveniente para armazenar / transmitir dados binários sobre os media que é usado especificamente para dados textuais.

Mas por Base-64? As duas alternativas para converter dados binários em texto que imediatamente vêm à mente são:

  1. decimal: armazenar o valor decimal de cada byte como três números: 045 112 101 037, etc, onde cada byte é representado por 3 bytes. Os dados incha três vezes.
  2. hexadecimal: armazenar os bytes como pares Hex: CA 47 0D 1A etc, onde cada byte é representado por 2 bytes. Os incha de dados duas vezes.

Base 64 mapeia 3 bytes (8 x 3 = 24 bits) em 4 caracteres que abrangem 6 bits (6 x 4 = 24 bits). O resultado é algo como "TWFuIGlzIGRpc3Rpb ...". Portanto, o inchaço é apenas um mero 4/3 = 1.3333333 vezes o original.

Além do que já foi dito, dois usos muito comuns que não foram listados são

Hashes:

clarões são funções de sentido único que transformam um bloco de bytes em outro bloco de bytes de um tamanho fixo de 128 bits, como ou 256 bits (SHA / MD5). Convertendo os bytes resultantes em Base64 torna muito mais fácil para exibir o hash especialmente quando você está comparando a soma de verificação de integridade. Hashes são tantas vezes visto em Base64 que muitas pessoas confundem-se como um hash Base64.

Criptografia:

Uma vez que uma chave de criptografia não tem que ser um texto, mas bytes matérias que às vezes é necessário para armazená-lo em um arquivo ou banco de dados, que Base64 vem a calhar para. Mesmo com os bytes criptografados resultantes.

Note que embora Base64 é frequentemente usado na criptografia não é um mecanismo de segurança. Qualquer um pode converter a seqüência de volta Base64 aos seus bytes originais, por isso não deve ser usado como um meio para proteger os dados, apenas como um formato para exibir ou armazenar bytes brutos com mais facilidade.

Certificados

certificados X509 no formato PEM são base 64 codificado. http://how2ssl.com/articles/working_with_pem_files/

A partir http://en.wikipedia.org/wiki/Base64

O termo base 64 refere-se a uma codificação de transferência conteúdo MIME específicas. Ele também é usado como um termo genérico para qualquer esquema de codificação semelhante que codifica dados binários numericamente por meio do tratamento e traduzi-la em uma representação de base 64. A escolha particular de uma base é devido ao história da codificação de caracteres: pode-se escolher um conjunto de 64 caracteres que é ao mesmo tempo parte do subconjunto comum para a maioria das codificações, e também pode ser impresso. Esta combinação deixa os dados improváveis ??para ser modificados em trânsito através de sistemas, tais como e-mail, que eram tradicionalmente não 8-bit limpo.

Base64 pode ser usado em uma variedade de contextos:

    senhas de e-mail
  • Evolução e Thunderbird uso Base64 para ofuscar [1]
  • Base64 pode ser usado para transmitir e armazenar texto que poderiam causar colisão delimitador
  • Base64 é usado frequentemente como um atalho rápido, mas inseguro para segredos obscuros, sem incorrer a sobrecarga de gerenciamento de chaves de criptografia

  • Os spammers usam Base64 para fugir ferramentas anti-spam básicas, que muitas vezes não decodificação Base64 e, portanto, não pode detectar palavras-chave em codificado mensagens.

  • Base64 é usado para cadeias de caracteres de codificação em arquivos LDIF
  • Base64 é por vezes utilizado para dados binários incorporar em um arquivo XML, usando uma sintaxe semelhante ao ...... por exemplo, bookmarks.html do Firefox.
  • Base64 também é usado quando comunicar com dispositivos governo Assinatura Fiscal impressão (normalmente, mais portas seriais ou paralelas) para minimizar o atraso na transferência de personagens de recibo para assinar.
  • Base64 é usado para arquivos binários de codificação como imagens dentro de scripts, para evitar dependendo arquivos externos.
  • Pode ser usado para dados de imagem em bruto incorporar em uma propriedade CSS background-image como.

Nos primeiros dias de computadores, quando a linha telefónica de comunicação inter-sistema não foi particularmente confiável, foi utilizado um método rápido e sujo de verificar a integridade dos dados: "bit de paridade". Neste método, cada byte transmitida teria de 7-bits de dados, e a 8 seria 1 ou 0, para forçar o número total de bits 1 no byte a ser ainda.

Assim 0x01 seria transmitido como 0x81; 0x02 seria 0x82; 0x03 permaneceria 0x03 etc.

caracteres Para promover este sistema, quando o conjunto de caracteres ASCII foi definido, apenas a 00-7F foram atribuídos. (Ainda hoje, todos os caracteres definidos no intervalo de 80-FF são não-padrão)

Muitos roteadores do dia colocar a verificação de paridade e tradução de bytes em hardware, forçando os computadores ligados a eles para lidar estritamente com os dados de 7 bits. Este anexos vigor e-mail (e todos os outros dados, razão pela qual HTTP e SMTP protocolos são baseados em texto), para ser convertido em um formato somente texto.

Alguns dos routers sobreviveu até a década de 90. I severamente dúvida alguma delas estão em uso hoje.

Alguns protocolos de transporte só permitem caracteres alfanuméricos para serem transmitidos. Basta imaginar uma situação em que caracteres de controle são usados ??para disparar ações especiais e / ou que só suporta uma largura pouco limitado por personagem. base64 transforma qualquer entrada para uma codificação que utiliza apenas caracteres alfanuméricos, +, / e o = como um preenchimento de caracteres.

O uso de Base64 vou descrever aqui é um pouco de um hack. Então, se você não gosta hacks, por favor não vá por diante.

Eu fui em apuros quando eu descobri que utf8 do MySQL não suporta caracteres Unicode de 4 bytes uma vez que utiliza uma versão de 3 bytes do utf8. Então o que eu fiz para apoiar completo unicode 4 bytes mais utf8 do MySQL? Bem, cordas base64 codificar ao armazenar no banco de dados e base64 decodificação ao recuperar.

Desde base64 codificação e decodificação é muito rápido, o acima funcionou perfeitamente.

Você tem os seguintes pontos a tomar nota:

  • na base 64 que codifica para usos 33% mais armazenamento

  • Cordas armazenados no banco de dados não vai ser legível (Você poderia vender isso como um recurso que cordas banco de dados usam uma forma básica de criptografia).

Você pode usar o método acima para qualquer mecanismo de armazenamento que não suporta unicode.

É usado para converter dados binários arbitrários para texto ASCII.

Por exemplo, anexos de e-mail são enviados desta forma.

Eu usá-lo em um sentido prático quando transferir grandes objetos binários (imagens) por meio de serviços da web. Então, quando eu estou testando um serviço de C # web usando um script python, o objeto binário pode ser recriada com um pouco de magia.

[em Python]

import base64
imageAsBytes = base64.b64decode( dataFromWS )

“esquemas de codificação Base64 são comumente usados ??quando há uma necessidade de codificar dados binários que necessidades ser armazenados e transferidos através de meios que são projetados para lidar com dados textuais. Isto é para garantir que os dados permanecem intactos sem modificação durante o transporte”(Wiki, 2017)

Exemplo poderia ser o seguinte: você tem um serviço web que aceitar apenas caracteres ASCII. Você deseja salvar e, em seguida, transferir os dados do usuário para algum outro local (API), mas destinatário falta receber dados intocadas. Base64 é para isso. . . A única desvantagem é que a codificação base64 vai exigir cerca de 33% mais espaço do que cordas regulares.

Outro Exemplo :: uenc = URL codificado = aHR0cDovL2xvYy5tYWdlbnRvLmNvbS9hc2ljcy1tZW4tcy1nZWwta2F5YW5vLXhpaS5odG1s = http :. //loc.querytip.com/asics-men-s-gel-kayano-xii.html

Como você pode ver não podemos colocar char “/” na URL, se quisermos enviar último URL visitado como parâmetro porque iria quebrar regra atributo / valor para “MOD reescrita.” - GET parâmetro

Um exemplo completo seria: “ http://loc.querytip.com/checkout/cart/add/uenc/http://loc.magento.com/asics-men- s-gel-Kayano-xii.html / produto / 93 /

Na maior parte, eu já vi isso usado para codificar dados binários em contextos que só pode lidar com ascii - ou uma simples -. Conjuntos de caracteres

Para expandir um pouco sobre o que Brad está dizendo: muitos mecanismos de transporte para e-mail e Usenet e outras formas de movimentação de dados não são "8 bit clean", o que significa que os caracteres fora do conjunto de caracteres ASCII padrão pode ser mutilado em trânsito - por exemplo, 0x0D pode ser visto como um retorno do carro, e transformou-se em um símbolo de retorno e de avanço de linha. Base 64 mapeia todos os caracteres binários em várias letras ASCII padrão e números e pontuação que eles não vão ser mutilado desta forma.

Anos atrás, quando a funcionalidade de discussão foi introduzida, de modo que foi totalmente baseados em texto, como o tempo passou, necessidade de acessórios como imagem e mídia (áudio, vídeo etc) veio à existência. Quando esses anexos são enviados através de internet (que é basicamente na forma de dados binários), a probabilidade de dados binários ficando corruptos é alto em sua forma bruta. Então, para resolver este problema BASE64 veio junto.

O problema com dados binários é que ele contém caracteres nulos que em algumas linguagens como C, C ++ representam fim da cadeia de caracteres de modo a enviar dados binários em forma bruta contendo bytes NULL vai parar um arquivo de ser lido inteiramente e levar em um corrupto dados.

Por exemplo:

Em C e C ++, este "nulo" de caracteres mostra a extremidade de uma corda. Assim, "OLÁ" é armazenado como esta:

H E L L O

72 69 76 76 79 00

O 00 diz "parar aqui".

Agora vamos mergulhar como codificação Base64 obras.

ponto a ser observado:. Comprimento da corda deve ser em múltiplos de 3

Exemplo 1:

Sequência para ser codificados: “ás”, comprimento = 3

1) Converter cada personagem para decimal.

a = 97, c = 99, e = 101

enter descrição da imagem aqui

2) Mudança de cada decimal para representação binária de 8 bits.

97 = 01100001, 01100011 99 =, 101 = 01100101

Combinada: 01100001 01100011 01100101

3) separada em um grupo de 6 bits.

011000 010110 001101 100101

4) Calcular binário para decimal

= 24 011000, 010110 = 22, = 13 001101, 100101 = 37

5) secretas caracteres decimais de base 64 usando gráfico de base 64.

= 24 Y, 22 = W, 13 = N, 37 = l

“ace” => “YWNl”

enter descrição da imagem aqui

Exemplo 2:

String para ser codificados: “abcd” Comprimento = 4, não é múltiplo de 3. Então, para fazer múltipla comprimento da corda de 3, devemos adicionar preenchimento 2 bit de comprimento make = 6. Padding bits é representado por “=” signo.

ponto a ser observado: Um pouco estofamento é igual a dois zeros 00 então dois bits de preenchimento é igual a quatro zeros 0000

.

Então, vamos iniciar o processo: -

1) Converter cada personagem para decimal.

a = 97, b = 98, c = 99, d = 100

2) Mudança de cada decimal para representação binária de 8 bits.

97 = 01100001, 01100010 = 98, 99 = 01100011, 01100100 = 100

3) Separa-se em um grupo de 6 bits.

011000, 010110, 001001, 100011, 011001, 00

então a última 6 bits não é completa para que inserir dois bits de preenchimento que equivale a quatro zeros “0000”.

011000, 010110, 001001, 100011, 011001, 000000 ==

Agora, é igual. Dois sinal de igual no final mostram que 4 zeros foram adicionados (ajuda na decodificação).

4) Calcular binário para decimal.

= 24 011000, 010110 = 22, 001001 = 9, 100011 = 35, = 25 011001, 000000 = 0 ==

5) secretas caracteres decimais de base 64 usando gráfico de base 64.

= 24 Y, 22 = W, 9 = j, 35 = j, 25 = Z, 0 = A ==

“abcd” => “YWJjZA ==”

Base64

na base 64 é um termo genérico para um número de esquemas de codificação semelhantes que codificam dados binários numericamente por meio do tratamento e traduzi-la em uma representação de base 64. Os origina Base64 prazo de um MIME codificação de transferência de conteúdo específico.

Base64 esquemas que codificam são comumente usados ??quando há uma necessidade de codificar dados binários que necessidades ser armazenados e transferidos através de meios que são projetados para lidar com dados textuais. Isto é para garantir que os dados permanecem intactos sem modificação durante o transporte. Base64 é usado comumente em uma série de aplicações, incluindo e-mail via MIME, e armazenamento de dados complexos em XML.

Base64 pode ser usado para muitas finalidades.

A principal razão é a de converter dados binários para algo razoável.

Às vezes eu usá-lo para passar dados JSON em torno de um local para outro, armazenar informações em cookies sobre um usuário.

Nota: Você "pode" usá-lo para criptografia - Não vejo por que as pessoas dizem que você não pode, e que não é criptografia, apesar de que seria facilmente quebrável e é desaprovada. meios de criptografia nada mais do que converter um seqüência de dados para outra série de dados que podem ser ou mais tarde descriptografado ou não, e é isso que base64 faz.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top