Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式。
之所以用6位表示,是为了能用可显示的ASCII码。
利用Cryptography API也可以完成Base64的编码和解码
void BinaryToBase64( BYTE *pbSignedMessageBlob, DWORD cbSignedMessageBlob, char** pBase64Encoded) { // // binary -> Base64 Encoding // DWORD iBase64EncodeSize = 0; CryptBinaryToString( pbSignedMessageBlob, cbSignedMessageBlob, CRYPT_STRING_BASE64, NULL, &iBase64EncodeSize); *pBase64Encoded = (char*)malloc(iBase64EncodeSize); CryptBinaryToString( pbSignedMessageBlob, cbSignedMessageBlob, CRYPT_STRING_BASE64, *pBase64Encoded, &iBase64EncodeSize); } void Base64ToBinary( LPCTSTR b64str, DWORD dwb64, BYTE **pbSignedMessageBlob, DWORD *cbSignedMessageBlob) { DWORD dwSkip; DWORD dwFlags; // // Base64 -> binary // CryptStringToBinary( b64str, dwb64, CRYPT_STRING_BASE64, NULL, cbSignedMessageBlob, &dwSkip, &dwFlags ); *pbSignedMessageBlob = (BYTE*)malloc(*cbSignedMessageBlob); CryptStringToBinary( b64str, dwb64, CRYPT_STRING_BASE64, *pbSignedMessageBlob, cbSignedMessageBlob, &dwSkip, &dwFlags ); }