CryptStringToBinary (crypt32)
Last changed: mporwit@centeris.com-216.254.62.194

.
Summary
The CryptStringToBinary function converts a formatted string into an array of bytes.

C# Signature:

[DllImport("crypt32.dll", SetLastError=true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool CryptStringToBinary([MarshalAs(UnmanagedType.LPWStr)] string pszString, uint cchString, uint dwFlags, [Out] IntPtr pbBinary, ref uint pcbBinary, out uint pdwSkip, out uint pdwFlags);

VB Signature:

Declare Function CryptStringToBinary Lib "crypt32.dll" (TODO) As TODO

User-Defined Types:

public class CRYPT_STRING_FLAGS
{
    public const uint CRYPT_STRING_BASE64HEADER = 0;
    public const uint CRYPT_STRING_BASE64 = 1;
    public const uint CRYPT_STRING_BINARY = 2;
    public const uint CRYPT_STRING_BASE64REQUESTHEADER = 3;
    public const uint CRYPT_STRING_HEX = 4;
    public const uint CRYPT_STRING_HEXASCII = 5;
    public const uint CRYPT_STRING_BASE64_ANY = 6;
    public const uint CRYPT_STRING_ANY = 7;
    public const uint CRYPT_STRING_HEX_ANY = 8;
    public const uint CRYPT_STRING_BASE64X509CRLHEADER = 9;
    public const uint CRYPT_STRING_HEXADDR = 10;
    public const uint CRYPT_STRING_HEXASCIIADDR = 11;
    public const uint CRYPT_STRING_HEXRAW = 12;
    public const uint CRYPT_STRING_NOCRLF = 0x40000000;
    public const uint CRYPT_STRING_NOCR = 0x80000000;
}

Alternative Managed API:

Do you know one? Please contribute it!

Notes:

None.

Tips & Tricks:

Please add some!

Sample Code:

public static byte[] StringToBinary(string datastr)
{
    uint flags, skipbytes, buflen;
    bool status;

    buflen = datastr.Length;
    IntPtr buffer = Marshal.AllocHGlobal((int)buflen);
    status = CryptStringToBinary(datastr,
        (uint)datastr.Length,
        CRYPT_STRING_FLAGS.CRYPT_STRING_BASE64_ANY,
        buffer,
        ref buflen,
        out skipbytes,
        out flags);

    byte[] keybytes = new byte[buflen];
    Marshal.Copy(buffer, keybytes, 0, (int)buflen);
    Marshal.FreeHGlobal(buffer);

    return keybytes;
}

Documentation