// // MODULE: RegistryPasswords.h // // PURPOSE: Handles the storing and retrieval of encrypted passwords in the registry. // // COMPANY: Saltmine Creative, Inc. (206)-284-7511 support@saltmine.com // // AUTHOR: Randy Biley // // ORIGINAL DATE: 10-23-98 // // NOTES: Utilizes CryptoAPI v2.0 to store and retrieve passwords from the registry. // // Here are some sample calls. // { // // Construct a registry password object. // CRegistryPasswords pwd( _T("SOFTWARE\\ISAPITroubleShoot"), // _T("APGTS"), _T("APGTS"), _T("Koshka8Spider") ); // ... or equivalently // CRegistryPasswords pwd( ); // bool bRetVal; // // pwd.WriteKey( _T("StatusAccess"), _T("2The9s") ); // Writes an encrypted password. // bRetVal= pwd.KeyValidate( _T("StatusAccess"), _T("2The9s1") ); // Returns false. // bRetVal= pwd.KeyValidate( _T("StatusAccess"), _T("2The9s") ); // Returns true. // } // // // Version Date By Comments //-------------------------------------------------------------------- // V3.0 10-23-98 RAB // #ifndef __REGISTRYPASSWORDS_19981023_H_ #define __REGISTRYPASSWORDS_19981023_H_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 #include #include #include "apgtsstr.h" #include "apgts.h" #define HASH_SEED _T("Koshka8Spider") class CRegistryPasswords { public: // Assembles all of the CryptAPI components. CRegistryPasswords( LPCTSTR szRegSoftwareLoc=REG_SOFTWARE_LOC, // Registry Software Key location. LPCTSTR szRegThisProgram=REG_THIS_PROGRAM, // Registry Program Name. LPCTSTR szKeyContainer=REG_THIS_PROGRAM, // Key Container Name. LPCTSTR szHashString=HASH_SEED // Value used to seed the hash. ); // Simply calls Destroy(). ~CRegistryPasswords(); // Function to encrypt and then write RegValue to RegKey. bool WriteKey( const CString& RegKey, const CString& RegValue ); // Function to encrypt a given key. bool EncryptKey( const CString& RegValue, char** ppBuf, long* plBufLen ); // Function to retrieves and then decrypt the value stored in RegKey, // compares to RegValue, returns true if equal. bool KeyValidate( const CString& RegKey, const CString& RegValue ); private: void Destroy(); // Releases all of the CryptAPI components. HCRYPTPROV m_hProv; // The handle to a CSP. HCRYPTHASH m_hHash; // The handle to a hash object. HCRYPTKEY m_hKey; // The handle to a cryptographic key. bool m_bAllValid; // A flag when set to true indicates valid handles for the // three objects above. CString m_strRegSoftwareLoc; // Registry location e.g. _T("SOFTWARE\\ISAPITroubleShoot") CString m_strRegThisProgram; // Registry program name e.g. _T("APGTS") } ; #endif // // EOF. //