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.
https://en.wikipedia.org/wiki/Base64#Design
La implementación Base64 de MIME usa A-Z, a-z y 0-9 para los primeros 62 valores
Por lo tanto, en su mayor parte, debe esperar solo caracteres alfanuméricos. La tabla de ejemplo en este artículo muestra ''+'' y ''-'' también; es poco probable que veas "*".
Puede usar http://www.motobit.com/util/base64-decoder-encoder.asp para convertir a Base64 por ejemplo, y para ''*'' esto devuelve "Kg =="