VC实现数据的加密和解密

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
szDecyptResult = m_oRSA.Decrypt(szDecyptMessage,m_iRSAe,m_iRSAn);
poEdit = (CEdit*)GetDlgItem(IDC_EDITALPHA);
poEdit->SetWindowText(szDecyptResult);
{ ቤተ መጻሕፍቲ ባይዱ
poEdit = (CEdit*)(GetDlgItem(IDC_EDITALPHA));
poEdit->GetWindowText(strTemp);
if(m_iMethod == DES && strTemp.GetLength() != 8)
{
AfxMessageBox("输入的加密的字符串长度不是8位,请重试!");
return;
}
//判别里面时候存在中文字符
for(i = 0;i< 8;i++)
{
//重字符串中获取第i个字符
char ch = strKey.GetAt(i);
//判别是否存在非法字符
if(ch&0x80)
{
AfxMessageBox("含有中文字符");
poEdit = (CEdit*)GetDlgItem(IDC_EDITQ);
poEdit->GetWindowText(strPrimeQ);
//判断输入的数据P、Q是否为素数
if((!ToPrimeNumber(strPrimeP)) || (!ToPrimeNumber(strPrimeQ)))
//同时将上面的明文去除
poEdit = (CEdit*)GetDlgItem(IDC_EDITALPHA);
poEdit->SetWindowText("");
break;
case MD5:
Binary2Hex(reinterpret_cast<unsigned char*>(acDigest), 16, acHex);
//显示解密的结果
szDecyptResult = m_oDES.Decrypt();
poEdit = (CEdit*)GetDlgItem(IDC_EDITALPHA);
//显示解密的结果
poEdit->SetWindowText(szDecyptResult);
break;
acDigest[i] = 0x0A;
poEdit->SetWindowText(acDigest);
break;
case RSA:
poEdit = (CEdit*)GetDlgItem(IDC_EDITP);
poEdit->GetWindowText(strPrimeP);
iLength = 16;
poEdit->SetWindowText(acHex);
poEdit = (CEdit*)(GetDlgItem(IDC_EDITSTR2));
//判别是否存在非法字符
for(i=0; i<iLength; i++)
if(acDigest[i] == 0)
return;
}
}
//返回的加密结果
strResult = m_oDES.Encrypt(strTemp,strKey);
poEdit = (CEdit*)GetDlgItem(IDC_EDITSTR2);
poEdit->SetWindowText(strResult);
m_oMD5.Reset();
m_oMD5.AddData(pcData, iLen);
m_oMD5.FinalDigest(acDigest);
}
//下面就是实现将输出的结果显示在EDIT里面就可以了
char acHex[129] = {0};
poEdit = (CEdit*)(GetDlgItem(IDC_EDITHEX2));
return;
AfxMessageBox("采用RSA算法加密显示结果");
iPrimeP = atoi(strPrimeP.GetBuffer(strPrimeP.GetLength()));
iPrimeQ = atoi(strPrimeQ.GetBuffer(strPrimeQ.GetLength()));
poEdit->SetWindowText(acHex);
break;
}
}
else//解密算法
{
m_iAction = DECRYPT;
CString szDecyptResult,szDecyptMessage;
switch(m_iMethod)
{
case DES:
break;
}
}
}
//对输入的字符串进行转化
BOOL CEncryAndDecryptDlg::ToPrimeNumber(CString szTemp)
{
//判别szTemp中是否有非数字的字符
poEdit->GetWindowText(strTemp);
iLen = strTemp.GetLength()/2;
char* pcData = static_cast<char*>(_alloca(iLen));
Hex2Binary(LPCTSTR(strTemp), reinterpret_cast<unsigned char*>(pcData), iLen);
case MD5://解密按钮已经被屏蔽掉
break;
case RSA:
AfxMessageBox("采用RSA算法解密显示结果");
//获取解密的密文
poEdit = (CEdit*)GetDlgItem(IDC_EDITSTR2);
poEdit->GetWindowText(szDecyptMessage);
char acDigest[65] = {0};
int iLen;
//判别为加密算法还是解密算法
if(poAction->GetCheck() == 1)//为加密算法
{
m_iAction = ENCRYPT;
//判别为字符串还是为16进制形式
if(poButton->GetCheck() == 1)//为字符串形式
poEdit->SetWindowText(acHex);
//在IDC_LBLSTR上面显示刚刚加密的内容
poStatic = (CStatic*)GetDlgItem(IDC_LBLSTR);
poStatic->SetWindowText("DES加密的明文为:"+strTemp);
void CEncryAndDecryptDlg::OnBtnstringdigest()
{
// TODO: Add your control notification handler code here
//判别算法为加密算法还是解密算法
CButton* poAction = (CButton*)(GetDlgItem(IDC_RADENCRYPT));
poEditKey = (CEdit*)GetDlgItem(IDC_EDITDES);
poEditKey->GetWindowText(strKey);
//判断密钥的长度是否为8位
if(strKey.GetLength() != 8)
{
AfxMessageBox("输入的密钥长度不是8位,请重试!");
return;
}
m_oMD5.Reset();
m_oMD5.AddData(LPCTSTR(strTemp),strTemp.GetLength());
m_oMD5.FinalDigest(acDigest);
}
else//为16进制形式
{
poEdit = (CEdit*)(GetDlgItem(IDC_EDITHEX));
VC实现数据的加密和解密(MD5加密\DES\RSA(2)[refer=8,canydice] 我想问一下怎么编写filebuffer.h呢?用MD5加密的算法里?[refer=1,abfsd]主要的程序如下:\r\n1)、MD...[/refer] 我想问一下怎么编写filebuffer.h呢?用MD5加密的算法里? 回复1楼abfsd发表: 主要的程序如下:\r\n1)、MD5\r\n\r\n// MD5.h: interface for the CMD5 class.\r\n//\r\n////////////////////////... 7楼 发表://对字符串或者是16进制数据进行[refer=7,abfsd]//对字符串或者是16进制数据进行加密或者解密\r\nvoid CEncryAndDecryptDlg::OnBtnstringdigest() \r\n{\r\n // T...[/refer] //对字符串或者是16进制数据进行加密或者解密
CString strKey,strResult;
CStatic* poStatic;
int iLength,i,iPrimeP = 0,iPrimeQ = 0,iSubkey = 0;
switch(m_iMethod)
{
case DES:
CEdit* poEditKey;
strKey.Format(_T("%d"),iSubkey);
poStatic = (CStatic*)GetDlgItem(IDC_LBLSTR);
poStatic->SetWindowText("RSA加密的密钥为:"+strKey);
strResult = m_oRSA.Encrypt(strTemp,iPrimeP,iPrimeQ,iSubkey);
break;
case MD5:
AfxMessageBox("采用MD5算法");
break;
case RSA:
AfxMessageBox("采用RSA算法");
break;
}*/
CString strTemp,strPrimeP,strPrimeQ;//用于获取EDIT中输入的信息
//清空IDC_EDITALPHA里面的输入的明文
poEdit = (CEdit*)GetDlgItem(IDC_EDITALPHA);
poEdit->SetWindowText("");
poEdit = (CEdit*)GetDlgItem(IDC_EDITSTR2);
poEdit->SetWindowText(strResult);
m_iRSAn = iPrimeP*iPrimeQ;
//strTemp为加密的内容
//调用CRSA类来进行加密
iSubkey = m_oRSA.GetSecretKey(iPrimeP,iPrimeQ);
//保存密钥,用于解密
m_iRSAe = iSubkey;
//显示密钥
CEdit* poEdit;
//获取单选框的值,用于区分为字符串还是16进制数据
CButton* poButton = (CButton*)(GetDlgItem(IDC_RADALPHA));
//确定选择的方法
/*switch(m_iMethod)
{
case DES:
AfxMessageBox("采用DES算法");
//将上面获取的字符串数据转化为16进制数据
Binary2Hex(reinterpret_cast<unsigned char*>(strResult.GetBuffer(0)),16,acHex);
poEdit = (CEdit*)GetDlgItem(IDC_EDITHEX2);
//显示结果
//将上面获取的字符串数据转化为16进制数据
Binary2Hex(reinterpret_cast<unsigned char*>(strResult.GetBuffer(0)),16,acHex);
poEdit = (CEdit*)GetDlgItem(IDC_EDITHEX2);
//显示结果
相关文档
最新文档