我有,可到www.v-galaxy.com上有疏菜兄的文章或www.vckbase.com,代码如下。
加密:
CString CHrtKey::EncryptGroupName(CString GroupName)
{
if(GroupName.IsEmpty())
return GroupName;
CString szData;
szData=GroupName;
szData.TrimRight();
return szData;
HCRYPTPROV hProv=0;
HCRYPTKEY hKey=0;
HCRYPTHASH hHash=0;
try
{
if(!CryptAcquireContext(&hProv,NULL,NULL,PROV_RSA_FULL,0))
{
if(GetLastError()==NTE_BAD_KEYSET)
{
if(CryptAcquireContext(&hProv,NULL,NULL,PROV_RSA_FULL,CRYPT_NEWKEYSET))
{
if(!CryptAcquireContext(&hProv,NULL,NULL,PROV_RSA_FULL,0))
AfxThrowUserException();
}
else
AfxThrowUserException();
}
else
AfxThrowUserException();
} if(!CryptCreateHash(hProv,CALG_MD5,0,0,&hHash))
AfxThrowUserException();
if(!CryptHashData(hHash,(BYTE*)_T("HTOM"),4,0))
AfxThrowUserException();
if(!CryptDeriveKey(hProv,CALG_RC4,hHash,CRYPT_EXPORTABLE,&hKey))
AfxThrowUserException();
if(!CryptDestroyHash(hHash))
AfxThrowUserException();
DWORD nLength;
nLength=szData.GetLength()+1;
if(!CryptEncrypt(hKey,0,TRUE,0,(BYTE*)szData.GetBufferSetLength(nLength),&nLength,nLength))
AfxThrowUserException();
szData.ReleaseBuffer();
}
catch(CUserException *e)
{
LPVOID szErrorText;
CString szErrorNum;
::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,NULL,
::GetLastError(),MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),(LPTSTR)&szErrorText,
0,NULL);
szErrorNum.Format("错误码:%d\n错误信息:",::GetLastError());
szErrorNum+=(LPCTSTR)szErrorText;
::LocalFree(szErrorText);
AfxMessageBox(szErrorNum,MB_OK|MB_ICONSTOP);
AfxThrowUserException();
}
return szData;
}
解密:
CString CHrtKey::DecryptGroupName(CString GroupName)
{
if(GroupName.IsEmpty())
return GroupName;
CString szData;
szData=GroupName;
szData.TrimRight();
return szData;
HCRYPTPROV hProv=0;
HCRYPTKEY hKey=0;
HCRYPTHASH hHash=0;
try
{
if(!CryptAcquireContext(&hProv,NULL,NULL,PROV_RSA_FULL,0))
{
if(GetLastError()==NTE_BAD_KEYSET)
{
if(CryptAcquireContext(&hProv,NULL,NULL,PROV_RSA_FULL,CRYPT_NEWKEYSET))
{
if(!CryptAcquireContext(&hProv,NULL,NULL,PROV_RSA_FULL,0))
AfxThrowUserException();
}
else
AfxThrowUserException();
}
else
AfxThrowUserException();
} if(!CryptCreateHash(hProv,CALG_MD5,0,0,&hHash))
AfxThrowUserException();
if(!CryptHashData(hHash,(BYTE*)_T("HTOM"),4,0))
AfxThrowUserException();
if(!CryptDeriveKey(hProv,CALG_RC4,hHash,CRYPT_EXPORTABLE,&hKey))
AfxThrowUserException();
if(!CryptDestroyHash(hHash))
AfxThrowUserException();
DWORD nLength;
nLength=szData.GetLength()+1;
if(!CryptDecrypt(hKey,0,TRUE,0,(BYTE *)szData.GetBufferSetLength(nLength),&nLength))
AfxThrowUserException();
szData.ReleaseBuffer();
}
catch(CUserException *e)
{
LPVOID szErrorText;
CString szErrorNum;
::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,NULL,
::GetLastError(),MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),(LPTSTR)&szErrorText,
0,NULL);
szErrorNum.Format("错误码:%d\n错误信息:",::GetLastError());
szErrorNum+=(LPCTSTR)szErrorText;
::LocalFree(szErrorText);
AfxMessageBox(szErrorNum,MB_OK|MB_ICONSTOP);
AfxThrowUserException();
}
return szData;
}
加密:
CString CHrtKey::EncryptGroupName(CString GroupName)
{
if(GroupName.IsEmpty())
return GroupName;
CString szData;
szData=GroupName;
szData.TrimRight();
return szData;
HCRYPTPROV hProv=0;
HCRYPTKEY hKey=0;
HCRYPTHASH hHash=0;
try
{
if(!CryptAcquireContext(&hProv,NULL,NULL,PROV_RSA_FULL,0))
{
if(GetLastError()==NTE_BAD_KEYSET)
{
if(CryptAcquireContext(&hProv,NULL,NULL,PROV_RSA_FULL,CRYPT_NEWKEYSET))
{
if(!CryptAcquireContext(&hProv,NULL,NULL,PROV_RSA_FULL,0))
AfxThrowUserException();
}
else
AfxThrowUserException();
}
else
AfxThrowUserException();
} if(!CryptCreateHash(hProv,CALG_MD5,0,0,&hHash))
AfxThrowUserException();
if(!CryptHashData(hHash,(BYTE*)_T("HTOM"),4,0))
AfxThrowUserException();
if(!CryptDeriveKey(hProv,CALG_RC4,hHash,CRYPT_EXPORTABLE,&hKey))
AfxThrowUserException();
if(!CryptDestroyHash(hHash))
AfxThrowUserException();
DWORD nLength;
nLength=szData.GetLength()+1;
if(!CryptEncrypt(hKey,0,TRUE,0,(BYTE*)szData.GetBufferSetLength(nLength),&nLength,nLength))
AfxThrowUserException();
szData.ReleaseBuffer();
}
catch(CUserException *e)
{
LPVOID szErrorText;
CString szErrorNum;
::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,NULL,
::GetLastError(),MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),(LPTSTR)&szErrorText,
0,NULL);
szErrorNum.Format("错误码:%d\n错误信息:",::GetLastError());
szErrorNum+=(LPCTSTR)szErrorText;
::LocalFree(szErrorText);
AfxMessageBox(szErrorNum,MB_OK|MB_ICONSTOP);
AfxThrowUserException();
}
return szData;
}
解密:
CString CHrtKey::DecryptGroupName(CString GroupName)
{
if(GroupName.IsEmpty())
return GroupName;
CString szData;
szData=GroupName;
szData.TrimRight();
return szData;
HCRYPTPROV hProv=0;
HCRYPTKEY hKey=0;
HCRYPTHASH hHash=0;
try
{
if(!CryptAcquireContext(&hProv,NULL,NULL,PROV_RSA_FULL,0))
{
if(GetLastError()==NTE_BAD_KEYSET)
{
if(CryptAcquireContext(&hProv,NULL,NULL,PROV_RSA_FULL,CRYPT_NEWKEYSET))
{
if(!CryptAcquireContext(&hProv,NULL,NULL,PROV_RSA_FULL,0))
AfxThrowUserException();
}
else
AfxThrowUserException();
}
else
AfxThrowUserException();
} if(!CryptCreateHash(hProv,CALG_MD5,0,0,&hHash))
AfxThrowUserException();
if(!CryptHashData(hHash,(BYTE*)_T("HTOM"),4,0))
AfxThrowUserException();
if(!CryptDeriveKey(hProv,CALG_RC4,hHash,CRYPT_EXPORTABLE,&hKey))
AfxThrowUserException();
if(!CryptDestroyHash(hHash))
AfxThrowUserException();
DWORD nLength;
nLength=szData.GetLength()+1;
if(!CryptDecrypt(hKey,0,TRUE,0,(BYTE *)szData.GetBufferSetLength(nLength),&nLength))
AfxThrowUserException();
szData.ReleaseBuffer();
}
catch(CUserException *e)
{
LPVOID szErrorText;
CString szErrorNum;
::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,NULL,
::GetLastError(),MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),(LPTSTR)&szErrorText,
0,NULL);
szErrorNum.Format("错误码:%d\n错误信息:",::GetLastError());
szErrorNum+=(LPCTSTR)szErrorText;
::LocalFree(szErrorText);
AfxMessageBox(szErrorNum,MB_OK|MB_ICONSTOP);
AfxThrowUserException();
}
return szData;
}
解决方案 »
- 记录集对象的adoEOF和BOF
- 给为大老们帮忙啊!控件快捷件问题!!!
- 快要崩溃了,100分求助这个问题,是我的程序结构不对还是什么原因呢?搞了很长时间了...
- 工具栏能不能加上边线?
- 急求visual studio 6.0光盘中的DAO引擎发布包。
- 请问:WIN98下怎样注册MSADO15.DLL这个组件? 用regsvr32.exe msado15.dll它说loadlibrary fail
- 高分求救 一个visual c++编译的问题。 真的很急!很急!很急!
- 如何在CMainFrame里面捕获WM_SYSCOMMAND消息?
- 如何成为调试高手
- 一个简单的题aaaa!
- 怎样显示缓冲区中的位图?(高分求代码片段)
- 请问如何在vc6.0中判断当前光驱的开/关状态,以便控制。
#define _WIN32_WINNT 0x0400
否则编译错误。
http://greenstuff.363.net