cifrado y descifrado Base64 y Base64URL

A, Base64 códec:

Base64 es un personaje representado por 64 datos binarios arbitrarios.

Cuando esto exe abierta, jpg, archivo pdf con el Bloc de notas estos, vamos a ver un montón de galimatías, porque el archivo binario que contiene una gran cantidad de caracteres no puede ser visualizado e impreso, así que si quieres como el software de procesamiento de texto Bloc de notas puede manejar datos binarios método de conversión, necesita una serie binaria, base 64 es el método más común de codificación binaria.

principio Base64 es muy simple, en primer lugar, para preparar una matriz de 64 caracteres incluyen:

['A', 'B', 'C', ... 'a', 'b', 'c', ... '0', '1', ... '+', '/']

Entonces, los datos binarios se procesa, un grupo de 3 bytes cada uno, un total de 3x8 = 24 bits. 24bit luego reclasificadas 4 grupos de seis en bits.

Y obtenemos cuatro dígitos que un índice, y la tabla de consulta, para obtener los correspondientes cuatro caracteres, la cadena está codificada. Por lo tanto, Base64 codificado codificará los datos binarios de 3 bytes 4 bytes de datos de texto, aumento del 33% en la longitud, los beneficios de los datos de texto codificados se pueden visualizar directamente en el cuerpo del mensaje, páginas web.

Si desea codificar datos binarios no es un múltiplo de tres, serán los últimos que quedan uno o dos bytes de cómo hacerlo? Base 64 con \ x00 byte después de traer el final y luego, al final de codificar más uno o dos = número indica cuántos bytes componen, al ser decodificados, se elimina automáticamente.

Python se construirá directamente base 64 base 64 codec:

>>> import base64
>>> base64.b64encode('binary\x00string')
'YmluYXJ5AHN0cmluZw=='
>>> base64.b64decode('YmluYXJ5AHN0cmluZw==')
'binary\x00string'

Puede ocurrir después de una Base64 estándar codificada caracteres + y / en el URL no se puede utilizar directamente como parámetros, por lo que alberga un base64 "URL seguras" codificados, de hecho, los caracteres + y / convertirse respectivamente - y _:

>>> base64.b64encode('i\xb7\x1d\xfb\xef\xff')
'abcd++//'
>>> base64.urlsafe_b64encode('i\xb7\x1d\xfb\xef\xff')
'abcd--__'
>>> base64.urlsafe_b64decode('abcd--__')
'i\xb7\x1d\xfb\xef\xff'

Usted puede definir su propio en el orden de 64 caracteres, por lo que se puede personalizar la codificación Base64, sin embargo, por lo general no es absolutamente necesario.

Base 64 es un método de codificación de la tabla de consulta, el cifrado no se puede utilizar, incluso si la tabla de códigos de encargo también.

Base64 codificación es adecuado para las pequeñas piezas de contenido, tales como certificado de firma digital, el contenido de la galleta y así sucesivamente.

Desde = caracteres pueden aparecer en la codificación Base64, pero = usada en la URL, Cookie que puede causar ambigüedad, por lo que, después de un montón de codificación Base64 = eliminará:

# 标准Base64:
'abcd' -> 'YWJjZA=='
# 自动去掉=:
'abcd' -> 'YWJjZA'

Después de quitar = cómo decodificarlo? Base 64 se debe a que los tres bytes a 4 bytes, la longitud de la codificación Base64 es siempre un múltiplo de 4, por lo tanto, la necesidad de añadir base 64 = longitud de la cadena se convierte en un múltiplo de cuatro, que puede ser decodificado correctamente .

Ejercicio: Por favor escribir a manejar una rid = función de base 64-decodificado.

>>> base64.b64decode('YWJjZA==')
'abcd'
>>> base64.b64decode('YWJjZA')
Traceback (most recent call last):
  ...
TypeError: Incorrect padding
>>> safe_b64decode('YWJjZA')
'abcd'

resumen:

Base64 es una cadena de texto arbitrario binario para el método de codificación, utiliza comúnmente para transferir pequeñas cantidades de datos binario en el URL, Cookie, página.

 

Dos, Base64URL códec

A BASE64URL es la BASE64 codificada sobre la base de una nueva forma de cifrado, codificación para la transferencia segura y sin problemas, la necesidad de BASE64 ser procesada en la red de hacer, especialmente el Internet.

  • BASE64URL proceso de codificación:

      1, el texto plano se encripta utilizando BASE64

      2, la siguiente base64 sobre la base de:

               1) la eliminación de la cola "="

               2) El "+" sustituido por "-"

               3) El "/" reemplazar "_"

  • BASE64URL proceso de decodificación:

      1, la BASE64URL decodificación codifica como sigue:

               1) El "-" sustituye por "+"

               2) El "_" sustituido por "/"

               3) (BASE64URL longitud de código calculado) 4%

                           a) el resultado es 0, ningún procesamiento

                           b) 2 como resultado, la cadena de caracteres añadiendo "=="

                           c) 3 como resultado, la cadena de caracteres añadiendo "="

      2, utilizando BASE64 decodificación de texto cifrado el texto claro original obtuvo

Unido a lograr Base64URL en JAVA de:

public static String base64UrlEncode(byte[] simple) 
{
   String s = new String(Base64.encodeBase64(simple)); // Regular base64 encoder 
   s = s.split("=")[0]; // Remove any trailing '='s 
   s = s.replace('+', '-'); // 62nd char of encoding 
   s = s.replace('/', '_'); // 63rd char of encoding 
   return s;
} 

public static byte[] base64UrlDecode(String cipher) 
{ 
   String s = cipher; 
   s = s.replace('-', '+'); // 62nd char of encoding 
   s = s.replace('_', '/'); // 63rd char of encoding 
   switch (s.length() % 4) 
   { // Pad with trailing '='s 
      case 0: 
         break; // No pad chars in this case 
      case 2: 
         s += "=="; 
         break; // Two pad chars 
      case 3: 
         s += "="; 
         break; // One pad char 
      default: 
         System.err.println("Illegal base64url String!");
    } 
    return Base64.decodeBase64(s); // Standard base64 decoder
}

 

Sobre la base de los otros originales, organizada en un documento, espero que aprendamos juntos, y gracias a la originalidad de los dos estudiantes y siguientes Liao Xuefeng.

https://www.liaoxuefeng.com/wiki/897692888725344/949441536192576

https://blog.csdn.net/weixin_42506905/article/details/82053888

https://blog.csdn.net/oceanyang520/article/details/52688959

Publicado cinco artículos originales · ganado elogios 3 · Vistas 364

Supongo que te gusta

Origin blog.csdn.net/lotus_2015/article/details/104637938
Recomendado
Clasificación