Pregunta

Como parte de intentar configurar SAML AuthN con Google Search Appliance, necesito para convertir mi respuesta en base 64. Para la prueba de concepto, acabo de utilizar el depurador en IntelliJ IDEA para reemplazar la cadena con una versión generada por el comando openssl:

openssl base64 -in inFileName -out outFileName

Ahora tengo que conseguir un trabajo versión sin mi intervención directa. Estoy usando los bienes comunes Apache base 64 codec biblioteca (v. 1.4), juego de caracteres UTF-8, longLinea 64, y el código es el siguiente:

Base64 encoder = new Base64(64);
signedSamlResponse = signedSamlResponse.replaceAll("[\n\r]","");
byte[] bytes = encoder.encode(signedSamlResponse.getBytes("UTF-8"));
signedSamlResponse = new String(bytes,0,bytes.length);

El resultado es bastante cerca de lo que necesito. Si hago un cifrado de OpenSSL en la cuerda justo antes de la biblioteca Apache hace de cosa (copiar signedSamlResponse antes de la línea 3 se ejecuta), y luego ejecutar un diff los dos resultados son casi idénticos. La única diferencia es el segundo personaje última en la última línea y esta diferencia ha sido consistente a través de todos mis intentos.

versión de OpenSSL:

dD48L0Fzc2VydGlvbj48L3NhbWxwOlJlc3BvbnNlPgo=

versión de Apache:

dD48L0Fzc2VydGlvbj48L3NhbWxwOlJlc3BvbnNlPg==

¿Qué necesito hacer para el conjunto de bytes o la cadena viene el fin de obtener los dos resultados que coinciden?

¿Fue útil?

Solución

Parece que los extremos de la versión de OpenSSL con un "\ n" - por lo que después de haber eliminado a todos ellos en su segunda línea, se debe añadir una al final:)

(Básicamente, la matriz de bytes de OpenSSL tiene una 0x0a extra al final;. La versión de Apache que has dado no lo hace)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top