Освященный метод заключается в использовании CryptoAPI и API защиты данных.
Для шифрования используйте что-то вроде этого (C ++):
DATA_BLOB blobIn, blobOut;
blobIn.pbData=(BYTE*)data;
blobIn.cbData=wcslen(data)*sizeof(WCHAR);
CryptProtectData(&blobIn, description, NULL, NULL, NULL, CRYPTPROTECT_LOCAL_MACHINE | CRYPTPROTECT_UI_FORBIDDEN, &blobOut);
_encrypted=blobOut.pbData;
_length=blobOut.cbData;
Расшифровка противоположна:
DATA_BLOB blobIn, blobOut;
blobIn.pbData=const_cast<BYTE*>(data);
blobIn.cbData=length;
CryptUnprotectData(&blobIn, NULL, NULL, NULL, NULL, CRYPTPROTECT_UI_FORBIDDEN, &blobOut);
std::wstring _decrypted;
_decrypted.assign((LPCWSTR)blobOut.pbData,(LPCWSTR)blobOut.pbData+blobOut.cbData/sizeof(WCHAR));
Если вы не укажете CRYPTPROTECT_LOCAL_MACHINE, зашифрованный пароль может быть надежно сохранен в реестре или в файле конфигурации, и только вы можете расшифровать его. Если вы укажете LOCAL_MACHINE, его сможет получить любой, у кого есть доступ к машине.