高分!!!关于简单加密!!! 打开exe后对exe前n个字节加密再存回去,然后改名 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 exe要如何加密呢?怕别人用?这样很容易,用二进制打开文件,在最后增加一些额外的长度,就不能用了。自己要用就将原文件的长度恢复,估计就可以了。文件属性可以通过stat的结构来获得,自己可以通过对结构中间的文件属性进行修改,自然就可以修改了。 一种简单的加解密算法(加密之星中的)/加密文件算法涵数BOOL CEDstarDlg::EncryptFile(CString filename,char *password){ SetFileAttributes(filename,FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_NORMAL); CFile m_file; if(m_file.Open(filename,CFile::modeReadWrite|CFile::typeBinary)) { char m_buffer[3001]; m_file.Read(m_buffer,3000); //判断文件头八个字符是否为指定字符, //是的话,则是加密过的,不用再加密了。 if(strncmp(m_buffer,"加密之星",8)==0) { m_file.Close(); return false; } //取头3000字节按位于密码相与, //并将其存于文件的未尾处。 int m_len=strlen(password); for(int i=0;i<3000;i++) m_buffer[i]^=password[i%m_len]; m_len=m_file.GetLength(); m_file.SeekToEnd(); m_file.Write(m_buffer,3000); //在加密后的文件开头处设置一特征字符串, //并将其它一些重要特征字符于一固定字符 //串PW相与后,再将其存入文件开头处。 memset(m_buffer,0,3001); strcpy(m_buffer,"加密之星"); int *data=(int *)&m_buffer[8]; data[0]=m_len; data[1]=strlen(password); strcpy((char *)&m_buffer[2*sizeof(int)+8],password); int temp=(2*sizeof(int)+8)+strlen(password); char * PW="xujingzhou"; int m_PWlen=strlen(PW); for(int j=8;j<= temp;j++) m_buffer[j]^=PW[j%m_PWlen]; m_file.SeekToBegin(); if(m_len<3000) m_file.Write(m_buffer,m_len); else m_file.Write(m_buffer,3000); m_file.Close(); return true; } return false;}//解密文件算法涵数BOOL CEDstarDlg::DecryptFile(CString filename,char *password){ SetFileAttributes(filename,FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_NORMAL); CFile m_file; if(m_file.Open(filename,CFile::modeReadWrite|CFile::typeBinary)) { char m_buffer[3001]; memset(m_buffer,0,3001); m_file.Read(m_buffer,3000); //判断文件头八个字符是否为加密后指定特征字 //符串,是的话,则是加密过的,可以解密了, //否则就不能解密。 if(strncmp(m_buffer,"加密之星",8)!=0) { m_file.Close(); return FALSE; } //计算出特征字后其它一些重要字节的长度, //并将其解密后,与指定密码比较,判断是 // 否相同。 int temp=(2*sizeof(int)+8)+strlen(password); char * PW="xujingzhou"; int m_PWlen=strlen(PW); for(int j=8;j<=temp;j++) m_buffer[j]^=PW[j%m_PWlen]; int *data=(int *)&m_buffer[8]; int m_len=data[1]; if((m_len!=(int)strlen(password)) || (strcmp((char *)&m_buffer[8+2*sizeof(int)],password)!=0)) { m_file.Close(); return FALSE; } //从加密后的文件未尾处取出3000字节, //将解密后,重写入文件开头处既可。 m_len=data[0]; long m_pos=m_file.Seek(-3000,CFile::end); int m_number=m_file.Read(m_buffer,3000); int m_passlen=strlen(password); for(int i=0;i<3000;i++) m_buffer[i]^=password[i%m_passlen]; m_file.SeekToBegin(); m_file.Write(m_buffer,3000); m_file.SetLength(m_len); m_file.Close(); return TRUE; } return FALSE;} MFC activex如何修改自己的属性 编辑框问题 如何做一个助手精灵!!! 为什么我的ClassView里看不到类了? vc如何显示超过256色背景图片 UpdateData的问题 可以在一个程序中设置两个定时器吗? 我用vc产生了一个非常简单的浏览器,我想用他来打开我的机器的Html文件,如何做呢? 关于网络方面的问题 如何中断系统的鼠标 请问怎样做到通过编程实现限制其他机器访问某些端口 怎样做一张dos 启动盘!前提我没有装好dos!
这样很容易,用二进制打开文件,在最后增加一些额外的长度,就不能用了。
自己要用就将原文件的长度恢复,估计就可以了。文件属性可以通过stat的结构来获得,自己可以通过对结构中间的文件属性进行修改,自然就可以修改了。
/加密文件算法涵数
BOOL CEDstarDlg::EncryptFile(CString filename,char *password)
{
SetFileAttributes(filename,FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_NORMAL);
CFile m_file;
if(m_file.Open(filename,CFile::modeReadWrite|CFile::typeBinary))
{
char m_buffer[3001];
m_file.Read(m_buffer,3000);
//判断文件头八个字符是否为指定字符,
//是的话,则是加密过的,不用再加密了。
if(strncmp(m_buffer,"加密之星",8)==0)
{
m_file.Close();
return false;
}
//取头3000字节按位于密码相与,
//并将其存于文件的未尾处。
int m_len=strlen(password);
for(int i=0;i<3000;i++)
m_buffer[i]^=password[i%m_len];
m_len=m_file.GetLength();
m_file.SeekToEnd();
m_file.Write(m_buffer,3000); //在加密后的文件开头处设置一特征字符串,
//并将其它一些重要特征字符于一固定字符
//串PW相与后,再将其存入文件开头处。
memset(m_buffer,0,3001);
strcpy(m_buffer,"加密之星");
int *data=(int *)&m_buffer[8];
data[0]=m_len;
data[1]=strlen(password);
strcpy((char *)&m_buffer[2*sizeof(int)+8],password);
int temp=(2*sizeof(int)+8)+strlen(password);
char * PW="xujingzhou";
int m_PWlen=strlen(PW);
for(int j=8;j<= temp;j++)
m_buffer[j]^=PW[j%m_PWlen];
m_file.SeekToBegin();
if(m_len<3000)
m_file.Write(m_buffer,m_len);
else
m_file.Write(m_buffer,3000); m_file.Close();
return true;
}
return false;
}//解密文件算法涵数
BOOL CEDstarDlg::DecryptFile(CString filename,char *password)
{
SetFileAttributes(filename,FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_NORMAL);
CFile m_file;
if(m_file.Open(filename,CFile::modeReadWrite|CFile::typeBinary))
{
char m_buffer[3001];
memset(m_buffer,0,3001);
m_file.Read(m_buffer,3000);
//判断文件头八个字符是否为加密后指定特征字
//符串,是的话,则是加密过的,可以解密了,
//否则就不能解密。
if(strncmp(m_buffer,"加密之星",8)!=0)
{
m_file.Close();
return FALSE;
}
//计算出特征字后其它一些重要字节的长度,
//并将其解密后,与指定密码比较,判断是
// 否相同。
int temp=(2*sizeof(int)+8)+strlen(password);
char * PW="xujingzhou";
int m_PWlen=strlen(PW);
for(int j=8;j<=temp;j++)
m_buffer[j]^=PW[j%m_PWlen];
int *data=(int *)&m_buffer[8];
int m_len=data[1];
if((m_len!=(int)strlen(password)) || (strcmp((char *)&m_buffer[8+2*sizeof(int)],password)!=0))
{
m_file.Close();
return FALSE;
} //从加密后的文件未尾处取出3000字节,
//将解密后,重写入文件开头处既可。
m_len=data[0];
long m_pos=m_file.Seek(-3000,CFile::end);
int m_number=m_file.Read(m_buffer,3000);
int m_passlen=strlen(password);
for(int i=0;i<3000;i++)
m_buffer[i]^=password[i%m_passlen];
m_file.SeekToBegin();
m_file.Write(m_buffer,3000);
m_file.SetLength(m_len);
m_file.Close(); return TRUE;
}
return FALSE;
}