Qual é o objetivo da codificação base 64 e por que ela é usada na autenticação básica HTTP?

129

Não recebo a criptografia Base64.

Se alguém pode descriptografar uma string Base64, qual é o seu objetivo?

Por que está sendo usado para autenticação HTTP Basic?

É como dizer a alguém que minha senha é revertida para OLLEH.

As pessoas que vêem OLLEH saberão que a senha original foi OLÁ!

ajsie
fonte
10
base64 não é uma criptografia, é uma codificação
n611x007

Respostas:

248

Base64 não é criptografia - é uma codificação. É uma maneira de representar dados binários usando apenas caracteres imprimíveis (texto).

Consulte este parágrafo na página da Wikipedia para autenticação básica HTTP :

Embora a codificação do nome de usuário e da senha com o algoritmo Base64 normalmente os torne ilegíveis a olho nu, eles são tão facilmente decodificados quanto codificados. Segurança não é a intenção da etapa de codificação. Em vez disso, a intenção da codificação é codificar caracteres não compatíveis com HTTP que possam estar no nome de usuário ou senha naqueles compatíveis com HTTP.

Matt Bridges
fonte
4
Além disso, parece que a codificação de caracteres relevante para obter os 'dados binários' da string deve ser iso-8859-1 . ( fonte )
Myobis
60

É normalmente chamado de codificação base64, não criptografia! O bom da codificação base64 é que ela permite representar dados (binários) usando apenas um subconjunto comum limitado dos caracteres disponíveis, com muito mais eficiência do que simplesmente escrever uma sequência de 1s e 0s como ASCII, por exemplo.

Flexo
fonte
6
+1, mas a comparação com o armazenamento de dados no fluxo 1s, 0s é muito exagerada. É melhor compará-lo com o armazenamento de dados em formato hexadecimal. Como hex criaria apenas x2mais bytes do que o fluxo original e 1s, 0s - cria x8vezes mais bytes. (E o Base64 gera x1.3mais dados que a matriz de bytes original). Às vezes, é aceitável codificar o fluxo binário como sequência hexadecimal, dobrando a quantidade de bytes - por exemplo, apenas para armazenar o hash da senha no banco de dados.
Agnius Vasiliauskas
30

En cripta ião requer uma chave (corda ou algoritmo), a fim de descriptografar; daí a "cripta" (raiz: criptografia )

En bacalhau ing modifica / turnos / altera um código de caracteres em outra. Nesse caso, os bytes comuns de dados agora podem ser facilmente representados e transportados usando HTTP.

vol7ron
fonte
5
Criptografia significa apenas "tornar oculto" - a criptografia baseada em chave é uma invenção muito recente. A codificação é uma forma de codificação usada como criptografia (embora não por ninguém com mais de 12 anos por centenas de anos).
2
A criptografia no vernáculo é usada para se referir aos modos recentes de criptografia, especificamente a criptografia de computador, que é baseada em chaves (chave pública / privada). Embora verdadeiro, não é necessário apontar uma definição literal de uma palavra datada; caso contrário, você estaria discutindo a definição histórica de muitas palavras em inglês usadas hoje. O vernáculo (e às vezes coloquial) é o que dá às palavras contexto e, portanto, definição.
Vol7ron #
1
Eu não acho que você parecia rude; Eu concordo com o seu ponto de vista sobre o contexto moderno. Palavras e definições estão em constante evolução. Eu acho que "codificar" e "criptografar" definitivamente têm duas definições muito distintas na computação moderna e sua resposta faz um bom esforço para resumir as diferenças.
precisa
A codificação Base64 é uma forma de ofuscação, que significa simplesmente tornar pouco claro. Para muitos aplicativos, isso é criptografia suficiente, onde o objetivo é simplesmente alterar qualquer texto não criptografado enviado por uma conexão, por exemplo.
Dominic Cerisano
6
@DominicCerisano: Não, a codificação base64 não conta como criptografia, e espero que você não a esteja usando para proteger nada.
Ry-
19

Na linguagem cotidiana, um "código" é algo secreto. Na ciência e na engenharia, um código é simplesmente um acordo, um conjunto de regras, de como escrever algo.

Esse código pode ser secreto. Nesse caso, é chamado de criptografia. Mas, em geral, um código não é secreto. Pegue o código genético. É simplesmente declara que o nosso ADN é construído a partir de quatro bases diferentes -  A, C, Ge Te que três bases em conjunto, formam um aminoácido. Há também uma tabela em que três letras formam qual aminoácido.

Não há nada secreto sobre esse código.

Da mesma forma, Base64 não é um código secreto. Pelo contrário, é um código que permite armazenar dados em seis bits por caractere (portanto, existem 64 entidades diferentes, ou seja, a "base" do sistema é 64, assim como a base do nosso sistema decimal é 10, pois existem 10 entidades diferentes chamados "dígitos").

Konrad Rudolph
fonte
17

A codificação Base-64 faz parte das especificações MIME. Ele fornece uma codificação segura de transporte para dados que não serão analisados ​​se / quando forem retransmitidos através de um host que usa um esquema de codificação diferente daquele usado pelo cliente original.

Existem muitos hosts diferentes nos intertubes e você realmente não pode assumir suporte para nada além de ASCII de 7 bits, sem arriscar a perda / confusão de dados.

Os mainframes da IBM, por exemplo, usam uma codificação chamada EBCDIC (que vem em vários sabores diferentes). Seus pontos de código são completamente diferentes dos pontos de código usados ​​pelos 'puters' baseados em ASCII - no ASCII, as letras AZ são 0x41 - 0x5A; no EBCDIC, as letras A - Z nem sequer são um intervalo contíguo: as letras AI vivem em 0xC1 - 0xC9, as letras JR vivem em 0xD1 - 0xD9 e as letras SZ vivem em 0xE2 - 0xE9.

Nicholas Carey
fonte
0

Por padrão, os parâmetros do campo do cabeçalho da mensagem nas mensagens HTTP (Hypertext Transfer Protocol) não podem transportar caracteres fora do conjunto de caracteres ISO 8859-1.

Se o nome de usuário e a senha contiverem caracteres incompatíveis, o HTTP não poderá transportar esses textos. para evitar isso, codificamos o nome de usuário e a senha com base64 para garantir que estamos enviando char compatível com HTTP por HTTP. para obter mais informações, consulte esta Basic_access_authentication

Varun
fonte