- 积分
- 6883
- 明经币
- 个
- 注册时间
- 2013-3-8
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
发表于 2022-2-11 09:39:43
|
显示全部楼层
//lsp文件加密文件的解密:
bool unProtected_Lisp_1()
{undefined
char fin[1000];
char fou[1000];
// 选择的文件名称
CString lv_strFileName = _T("");
// 设置文件过滤格式
CString lv_strFilterLSP = _T("lsp文件(*.lsp)|*.lsp|");
CString lv_strFileFilter = lv_strFilterLSP;
// 设置文件后缀名称
CString lv_strName[] = {"", "lsp",""};
CString lv_strExtension = _T("");
CString m_strFilePathName;
CString m_strFileName;
CString m_strExtName;
// 打开保存文件对话框
CFileDialog lv_FileOpenDlg(FALSE, NULL, NULL, OFN_HIDEREADONLY, lv_strFileFilter);
lv_FileOpenDlg.m_ofn.lpstrTitle = "【LISP文件解密】 选择已加密的LISP文件:";
if (IDOK != lv_FileOpenDlg.DoModal())
{undefined
return false;
}
else
{undefined
// CString CFileDialog::GetPathName :得到完整文件名,包括目录名和扩展名如:c:/test/test1.txt
// CString CFileDialog::GetFileName :得到完整文件名,包括扩展名如:test1.txt
// CString CFileDialog::GetFileExt :得到完整文件扩展名,如:txt
// CString CFileDialog::GetFileTitle:得到完整文件名,不包括目录名和扩展名如:test1
m_strFilePathName = lv_FileOpenDlg.GetPathName();
m_strFileName = lv_FileOpenDlg.GetFileName();
m_strExtName = lv_FileOpenDlg.GetFileExt();
strcpy(fin,((LPSTR&)m_strFilePathName));
CString m_strOutFilePathName=m_strFilePathName.Left(m_strFilePathName.GetLength()-4);
m_strOutFilePathName.Replace("_pro","");
m_strOutFilePathName+="_res.lsp";
strcpy(fou,((LPSTR&)m_strOutFilePathName));
}
//
FILE *in_file,*out_file;
//register char zf1,zf2;
in_file=fopen(fin,"rb");
if(in_file==NULL)
{undefined
AfxMessageBox("\n不能打开LISP已加密的源文件!");
return false;
}
CString strINdex;
fgets((LPSTR&)strINdex, 28, in_file);
if(strINdex.Find("PROTECTED LISP")==-1)
{undefined
fclose(in_file);
AfxMessageBox("\nLISP文件没有加密,不用解密!");
return false;
}
out_file=fopen(fou,"wb");
if(out_file==NULL)
{undefined
fclose(in_file);
AfxMessageBox("\n不能建立LISP解密文件!");
return false;
}
//30:1Bytes,存储密码字符,如'A'
//fputc('A',out_file);
unsigned char pass_ch;
long strPass=30;
fseek(in_file,strPass,SEEK_SET);
pass_ch=fgetc(in_file);
//fputs(";;AutoCAD unPROTECTED LISP file",out_file);//27个
//fputs("\0x0D\0x0A",out_file);
//putc(0x0A,out_file);//27个 0x0A
//printf("strPass=%s\n",pass_ch);
//CString strFormat;
//strFormat.Format("strPass=%d\n",pass_ch);
//AfxMessageBox(strFormat);
int nIndex=0;
unsigned char old_ch;
unsigned char new_ch;
unsigned int i;
fseek(in_file,31,SEEK_SET);
while (! feof (in_file))
{undefined
old_ch=fgetc(in_file);
//文件结束中断循环
if (old_ch == 0x1A) //0x1A 文件结束
{undefined
break;
}
//若为回车继续循环
if (old_ch == 0x0D) //0x0D 回车
continue;
//异或运算
new_ch = pass_ch ^ old_ch;
//用上一密码字符
if ((new_ch == 0x0D)||(new_ch == 0x1A)) //是 回车 或 文件结束
new_ch=old_ch;
//若为换行,则加回车
if (new_ch == 0x0A) //0x0A 换行
putc (0x0D,out_file); //0x0D 回车
//写入已加密字符
putc(new_ch,out_file);
//左移一位,相当于乘2
i=old_ch; //注意:这里与加密不同!!!
i = i<<1;
//溢出位1,加到末位
if (i>255)
i=i-255;
//产生新的密码字符
pass_ch = (unsigned char) i;
}
fclose (in_file);
//putc(0x1A,out_file);
fclose (out_file);
return true;
}
————————————————
版权声明:本文为CSDN博主「weixin_39902608」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_39902608/article/details/111764004 |
|