Comprobar de forma fiable si una cadena está codificada en base64 en .Net

Antes de comenzar: Sí, he comprobado las otras preguntas y respuestas sobre este tema tanto aquí como en otros lugares.

He encontrado una cadena de ejemplo que .Net descodificará en base64 aunque en realidad no está codificada en base64. Aquí está el ejemplo:

Rhinocort Aroma 64mcg / dosis Spray Nasal

El método .Net Convert.FromBase64String no lanza una excepción al descodificar esta cadena, por lo que mi método IsBase64Encoded devuelve felizmente verdadero para esta cadena.

Curiosamente, si uso el comando cygwin base64 -d usando esta cadena como entrada, falla con el mensaje entrada inválida .

Más interesante aún, la fuente que pensé que pertenece a este ejecutable ( http://libb64.sourceforge.net/ ) “decodifica” esta misma cadena con el mismo resultado que obtengo de .Net Convert.FromBase64String. Seguiré buscando con la esperanza de encontrar una pista en otro lugar, pero ahora mismo estoy perplejo.

¿Algunas ideas?

Hay una solución ligeramente mejor que también comprueba la longitud de la cadena de entrada.

Te recomiendo que hagas una comprobación al principio. Si la entrada es nula o está vacía, devuelva false .

http://www.codeproject.com/Questions/177808/How-to-determine-if-a-string-is-Base-decoded-or