imagen getbytes example encodebase64 ejemplo convertir codificar archivo java regex base64 apache-commons

java - getbytes - Rango de caracteres válidos para una codificación base 64



java encodebase64 example (4)

Estoy interesado en lo siguiente:
¿Hay una lista de caracteres que nunca ocurriría como parte de una cadena codificada en base 64?
Por ejemplo * . No estoy seguro de si esto ocurrirá o no. Si la entrada original realmente tuviera * como parte de ella, ¿se codificaría de manera diferente?


Aquí es lo que podría aparecer: RFC 4648

Incluye esta conveniente tabla:

Table 1: The Base 64 Alphabet Value Encoding Value Encoding Value Encoding Value Encoding 0 A 17 R 34 i 51 z 1 B 18 S 35 j 52 0 2 C 19 T 36 k 53 1 3 D 20 U 37 l 54 2 4 E 21 V 38 m 55 3 5 F 22 W 39 n 56 4 6 G 23 X 40 o 57 5 7 H 24 Y 41 p 58 6 8 I 25 Z 42 q 59 7 9 J 26 a 43 r 60 8 10 K 27 b 44 s 61 9 11 L 28 c 45 t 62 + 12 M 29 d 46 u 63 / 13 N 30 e 47 v 14 O 31 f 48 w (pad) = 15 P 32 g 49 x 16 Q 33 h 50 y

De modo que una expresión regular que coincida con cualquier carácter que nunca debería aparecer en las codificaciones de Base 64 sería:

[^A-Za-z0-9+/=]

Sin embargo, como señala la respuesta de Kapeps, esta es solo la recomendación. Las implementaciones específicas pueden elegir un conjunto diferente de 64 caracteres. (De hecho, incluso el RFC vinculado contiene una tabla alternativa para la codificación segura de URL y nombre de archivo, que reemplaza el carácter 62 y 63 con - y _ respectivamente). Así que supongo que realmente depende de la implementación que creó la codificación.


Base64 solo contiene A–Z , a–z , 0–9 , + , / y = . Entonces, la lista de caracteres que no se utilizarán es: todos los caracteres posibles menos los mencionados anteriormente.

Para propósitos especiales . y _ son posibles, también.


Probablemente estés seguro con las otras respuestas en la mayoría de las situaciones, pero según el artículo de Wikipedia sobre Base64 no debería haber una lista definitiva en la que puedas confiar:

La elección particular del juego de caracteres seleccionado para los 64 caracteres requeridos para la base varía entre implementaciones.

RFC 4648 menciona otros alfabetos, como el alfabeto base 64 "URL y nombre de archivo seguro" , donde + y / se reemplazan por - y _ .

Hay una tabla de variantes de Base64 que usan diferentes caracteres. Tenga en cuenta que existen reglas específicas de implementación sobre los separadores de línea, que puede encontrar en la misma tabla. Algunas implementaciones como Mime incluso permiten (e ignoran) caracteres que no están en el alfabeto.