使用DES加密,将密钥写死到程序里是否安全?
别人通过查看exe文件,是否能够分析出该密钥。

解决方案 »

  1.   

    当然不安全了!呵呵,你应该做更多的“弯”============================================================================
    DocWizard http://www.betajin.com/alphasun/index.htm
      

  2.   

    CryptoAPI or LsaStorePrivateDatadefine NS2HR(arg) if (0 != arg) return HRESULT_FROM_WIN32(GetLastError())
    STDMETHODIMP CSecurity::WriteSecret(IN BSTR KeyName, IN BSTR Data)
    {
        if ((NULL == KeyName) || (NULL == Data))
             return E_INVALIDARG;
        LSA_HANDLE hLsa = 0;
        LSA_OBJECT_ATTRIBUTES loaUseless = {0};
        NS2HR(LsaOpenPolicy(NULL, &loaUseless , POLICY_CREATE_SECRET, &hLsa));
        LSA_UNICODE_STRING     lsKey,
                                 lsData;
        InitLsaString(lsKey, const_cast<LPWSTR>(KeyName));
        InitLsaString(lsData, const_cast<LPWSTR>(Data));    NS2HR(LsaStorePrivateData(hLsa, &lsKey, &lsData));
        NS2HR(LsaClose(hLsa));
        return S_OK;
    }STDMETHODIMP CSecurity::ReadSecret(IN BSTR KeyName, OUT BSTR *Data)
    {
        if (NULL == Data)
             return E_POINTER;
        if ((NULL == KeyName) || (NULL != *Data))
             return E_INVALIDARG;
        LSA_HANDLE hLsa = 0;
        LSA_OBJECT_ATTRIBUTES loaUseless = {0};
        NS2HR(LsaOpenPolicy(NULL, &loaUseless , POLICY_GET_PRIVATE_INFORMATION , &hLsa));    LSA_UNICODE_STRING     lsKey, *plsData;
        InitLsaString(lsKey, const_cast<LPWSTR>(KeyName));    NS2HR(LsaRetrievePrivateData(hLsa, &lsKey, &plsData));
        *Data = SysAllocStringLen(plsData->Buffer, plsData->Length / 2);
        NS2HR(LsaFreeMemory((LPVOID)plsData));
        NS2HR(LsaClose(hLsa));
        return S_OK;
    }void CSecurity::InitLsaString(OUT LSA_UNICODE_STRING& LsaString, IN LPWSTR szString)
    {
       DWORD StringLength;
        if (NULL == szString) 
        {
             LsaString.Buffer = NULL;
             LsaString.Length = 0;
             LsaString.MaximumLength = 0;
        }
        else
        {
             StringLength = wcslen(szString);
             LsaString.Buffer = szString;
             LsaString.Length = (USHORT) StringLength * sizeof(WCHAR);
             LsaString.MaximumLength = (USHORT) (StringLength + 1) * sizeof(WCHAR);
        }
    };
      

  3.   

    by the way, AES is better than DES.