2016-08-08 45 views
1

Ich möchte überprüfen, ob eine Eingabezeichenfolge gültige Base64 ist oder nicht. Wenn es gültig ist, dann wandle es in Byte [] um.Überprüfen Sie die Zeichenfolge als Proper Base64String und Konvertieren in Byte []

Ich habe versucht, die folgenden Lösungen

  1. RegEx
  2. MemoryStream
  3. Convert.FromBase64String

Zum Beispiel habe ich überprüfen möchten, ob "932rnqia38y2" eine gültige Base64-String ist oder nicht und wandeln sie dann zu byte[]. Diese Zeichenfolge ist nicht gültig Base64, aber ich werde immer wahr oder gültig in meinem Code.

Bitte lassen Sie mich wissen, wenn Sie irgendwelche Lösungen haben.

-Code

//Regex _rx = new Regex(@"^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}[AEIMQUYcgkosw048]=|[A-Za-z0-9+/][AQgw]==)?$", RegexOptions.Compiled); 

Regex _rx = new Regex(@"^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$", RegexOptions.Compiled); 
if (image == null) return null; 

if ((image.Length % 4 == 0) && _rx.IsMatch(image)) 
{ 
    try 
    { 
     //MemoryStream stream = new MemoryStream(Convert.FromBase64String(image)); 
     return Convert.FromBase64String(image); 
    } 
    catch (FormatException) 
    { 
     return null; 
    } 
} 
+0

932rnqia38y2 mir gültig aussieht. Rufen Sie einfach FromBase64String auf und fangen Sie das Potential Exception sollte ausreichend sein. – Ralf

+0

Ich glaube nicht, dass Sie überprüfen können, ob eine Zeichenfolge mit regulären Ausdrücken als Base-64 interpretiert werden kann. In jedem Fall ist der String, den Sie zu validieren versuchen * gültig *, also ist es nicht überraschend, dass Sie wahr werden. Ob die Daten * in * der String gültig sind, ist ein ganz anderes Problem. – Luaan

Antwort

2

Erstellen Sie einfach einige Helfer, die Format auf Eingabestring fangen:

public static bool TryGetFromBase64String(string input, out byte[] output) 
    { 
     output = null; 
     try 
     { 
      output = Convert.FromBase64String(input); 
      return true; 
     } 
     catch (FormatException) 
     { 
      return false; 
     } 
    }