int ToBase64Crypto( const BYTE* pSrc, int nLenSrc, wchar_t* pDst, int nLenDst ) { DWORD nLenOut= nLenDst; BOOL fRet= CryptBinaryToStringW((const BYTE*)pSrc, nLenSrc,CRYPT_STRING_BASE64 | CRYPT_STRING_NOCRLF,pDst, &nLenOut); if (!fRet) nLenOut=0; return( nLenOut ); }
BOOL CSyoboiCalUtil::Base64Enc(LPCSTR src, DWORD srcSize, LPWSTR dest, DWORD* destSize) { if( destSize == NULL ){ return FALSE; } DWORD dwDst = 0; if( CryptBinaryToStringW( (BYTE*)src, srcSize, CRYPT_STRING_BASE64, NULL, &dwDst ) == FALSE){ return FALSE; } if( *destSize < dwDst+1 ){ *destSize = dwDst+1; return FALSE; } if( dest != NULL ){ if( CryptBinaryToStringW( (BYTE*)src, srcSize, CRYPT_STRING_BASE64, dest, destSize ) ){ } } return TRUE; }
std::wstring CStringUtils::Encrypt(const wchar_t * text) { DATA_BLOB blobin = { 0 }; DATA_BLOB blobout = { 0 }; std::wstring result; blobin.cbData = (DWORD)wcslen(text)*sizeof(wchar_t); blobin.pbData = (BYTE*)(LPCWSTR)text; if (CryptProtectData(&blobin, L"TSVNAuth", NULL, NULL, NULL, CRYPTPROTECT_UI_FORBIDDEN, &blobout) == FALSE) return result; DWORD dwLen = 0; if (CryptBinaryToStringW(blobout.pbData, blobout.cbData, CRYPT_STRING_HEX | CRYPT_STRING_NOCRLF, NULL, &dwLen) == FALSE) return result; std::unique_ptr<wchar_t[]> strOut(new wchar_t[dwLen + 1]); if (CryptBinaryToStringW(blobout.pbData, blobout.cbData, CRYPT_STRING_HEX | CRYPT_STRING_NOCRLF, strOut.get(), &dwLen) == FALSE) return result; LocalFree(blobout.pbData); result = strOut.get(); return result; }
HRESULT SerializePropVariantAsString(REFPROPVARIANT propvar, PWSTR *ppszOut) { SERIALIZEDPROPERTYVALUE *pBlob; ULONG cbBlob; // serialize PROPVARIANT to binary form HRESULT hr = StgSerializePropVariant(&propvar, &pBlob, &cbBlob); if (SUCCEEDED(hr)) { // determine the required buffer size hr = E_FAIL; DWORD cchString; if (CryptBinaryToStringW((BYTE *)pBlob, cbBlob, CRYPT_STRING_BASE64, NULL, &cchString)) { // allocate a sufficient buffer hr = E_OUTOFMEMORY; *ppszOut = (PWSTR)CoTaskMemAlloc(sizeof(WCHAR) * cchString); if (*ppszOut) { // convert the serialized binary blob to a string representation hr = E_FAIL; if (CryptBinaryToStringW((BYTE *)pBlob, cbBlob, CRYPT_STRING_BASE64, *ppszOut, &cchString)) { hr = S_OK; } else { CoTaskMemFree(*ppszOut); *ppszOut = NULL; } } } CoTaskMemFree(pBlob); } return hr; }
ULONG _Bin2Hex(CONST PBYTE Binary, ULONG Length, PWSTR* PtrBuffer) { BOOL Result = FALSE; ULONG Request = 0; Result = CryptBinaryToStringW(Binary, Length, CRYPT_STRING_HEXASCII, NULL, &Request); if (Result == FALSE) return -1; PWSTR Buffer = reinterpret_cast<PWSTR>(VirtualAlloc(NULL, Request<<1, MEM_COMMIT, PAGE_READWRITE)); if (Buffer == NULL) return -1; Result = CryptBinaryToStringW(Binary, Length, CRYPT_STRING_HEXASCII, Buffer, &Request); if (Result == FALSE) _ReleaseB2H(Buffer); else { *PtrBuffer = Buffer; return Request; } return -1; }