Ⅰ 硬件加密和软件加密哪个更安全,有什么区别
首先如果是软件加密那么可以对加密软件进行反汇编,通过查看它汇编代码(工作量非常大)就可以知道它的加密算法从而破解。但是如果是硬件加密,这种手段是不可行的。
然后就是软件加密容易受到时序攻击
时序攻击(TIming attacks)
一些安全相关的操作使用输入的值和密钥,由半导体芯片执行不同的时间来比较。小心的时序测量和分析就能恢复出密钥。这种攻击成功破解了实际的RSA签名的智能卡。
为了攻击成功,需要收集装置的信息,与处理时间整合比较,如问答延迟(quesTIon-answer delay)。很多密码算法容易受到时序攻击,主要原因是软件来执行算法。时序攻击可用在安全保护是基于密码的微控制器,或使用确定数字的卡或密码来进行访问控制的系统,如达拉斯的iButton产品。
为防止此类攻击可以使用盲签名(Blinding signatures)技术。利用选定的随机数与输入数据混合来防止破解者知道输入数据的数学运算法则,设计者需要小心计算处理器的周期。当密码进行比较时确保正确和错误的时间是一样的,例如:飞思卡尔的68HC08微控制器的内部存储器载入模块在输入正确的八字节密码后可以访问内部闪存。为达到正确和错误的密码都处理相同的时间,程序中增加了额外的空操作指令。这对时序攻击提供了很好的保护
来自https://news.html5.qq.com/share/3344769423?ch=060000&tabId=0&tagId=MttTagSource&docId=3344769423&url=http%3A%2F%2Fkuaibao.qq.com%2Fs%2F20170822A01ONI00&clientWidth=360&dataSrc=89&qburl=qb%3A%2F%2Fext%2Fread%3Fcid%3DMttTagSource%26type%3D0%26mttsummaryid%3D3344769423%26b_f%3D060000%26bizid%3D1&sc_id=LAuiYdC
Ⅱ 给文件夹加密的永久免费软件,谢谢。要操作简单的。
宏杰工具之文件夹加密,网上都有,随便,下载个就OK了,最好是下载最新版本,不过下载之后,要设置宏杰工具的密码,这样的话,别人打死都删除不了和看不了里面文件了。
宏杰工具之文件夹加密一款永久免费、非常优秀的、专业的文件和文件夹加密器。
永久免费、没有任何使用限制的加密软件。
绝不是简单的隐藏文件夹!!!
经过该软件加密的文件(夹)可以防止访问、防止删除、防止拷贝、内容只有您知道。
这款文件加密软件具有界面漂亮友好、简单易用、稳定无错、功能强大和兼容性好等特点。
使用起来,只要点击需要加密对象的右键即可轻松实现。解密只要双击已加密对象输入密码即可轻松搞定。一切为真正实用、方便着想。
不属系统盘的资料,即使重装、Ghost还原、系统盘格式化,也依然可以照样使用。
使用的加密方式安全性极高,达到了文件夹加密安全性的顶峰!使用任何工具都无法解开!
值得一提的是它的加密速度极快,上百 G 的数据仅需1秒钟完成。 没有大小限制。
使用了高强度的加密算法,给文件夹加密码,让您的文件夹更安全。不仅可以将您的文件夹彻底隐藏起来,更可以锁定您的软盘、硬盘等所有驱动器!方便,安全!另外它与系统结合的天衣无缝,在电脑中任何一个文件夹上右键即可加密。
强大的防删除功能:让破坏者无从下手。
本软件为绿色软件,安装卸载100% 无残留
唉!这个问题我都回了N遍了。度娘救救我啊!
Ⅲ 如何加密和解密文件(c语言),,举几个简单的例子即可。。。。。。
读取文件
ch=fgetc(fp);
while(ch!=EOF)
{
ch++; //移位加密,解密就是减一
ch=fgetc(fp);
}
Ⅳ 有什么把文件加密的软件吗
高强度文件加密大师,网络找,很好用的,添加右键快捷方式,可以加密文件和文件夹 http://search.newhua.com/search.asp?keyword=%B8%DF%C7%BF%B6%C8%CE%C4%BC%FE&Submit=%CB%D1%CB%F7
Ⅳ 怎么把自己电脑上C盘的文件加密
硬盘加密的几种方法
一、修改硬盘分区表信息 硬盘分区表信息对硬盘的启动至关重要,如果找不到有效的分区表,将不能从硬盘启动或即使从软盘启动也找不到硬盘。通常,第一个分区表项的第0子节为80h,表示c盘为活动dos分区,硬盘能否自举就依*它。若将该字节改为00h,则不能从硬盘启动,但从软盘启动后,硬盘仍然可以访问。分区表的第4字节是分区类型标志,第一分区的此处通常为06h,表示c盘为活动dos分区,若对第一分区的此处进行修改可对硬盘起到一定加密作用。
具体表现在:
1.若将该字节改为0,则表示该分区未使用,当然不能再从c盘启动了。从软盘启动后,原来的c盘不见了,你看到的c盘是原来的d盘,d盘是原来的e盘,依此类推。
2.若将此处字节改为05h,则不但不能从硬盘启动,即使从软盘启动,硬盘的每个逻辑盘都不可访问,这样等于整个硬盘被加密了。另外,硬盘主引导记录的有效标志是该扇区的最后两字节为55aah。若将这两字节变为0,也可以实现对整个硬盘加锁而不能被访问。硬盘分区表在物理0柱面0磁头1扇区,可以用norton for win95中的diskedit直接将该扇区调出并修改后存盘。或者在debug下用int 13h的02h子功能将0柱面0磁头1扇区读到内存,在相应位置进行修改,再用int 13h的03h子功能写入0柱面0磁头1扇区就可以了。
上面的加密处理,对一般用户来讲已足够了。但对有经验的用户,即使硬盘不可访问,也可以用int 13h的02h子功能将0柱面0磁头1扇区读出,根据经验将相应位置数据进行修改,可以实现对硬盘解锁,因为这些位置的数据通常是固定的或有限的几种情形。另外一种保险但显得笨拙的方法是将硬盘的分区表项备份起来,然后将其全部变为0,这样别人由于不知道分区信息,就无法对硬盘解锁和访问硬盘了。
二、对硬盘启动加口令
我们知道,在cmos中可以设置系统口令,使非法用户无法启动计算机,当然也就无法使用硬盘了。但这并未真正锁住硬盘,因为只要将硬盘挂在别的计算机上,硬盘上的数据和软件仍可使用。要对硬盘启动加口令,可以首先将硬盘0柱面0磁头1扇区的主引导记录和分区信息都储存在硬盘并不使用的隐含扇区,比如0柱面0磁头3扇区。然后用debug重写一个不超过512字节的程序(实际上100多字节足矣)装载到硬盘0柱面0磁头1扇区。该程序的功能是执行它时首先需要输入口令,若口令不对则进入死循环;若口令正确则读取硬盘上存有主引导记录和分区信息的隐含扇区(0柱面0磁头3扇区),并转去执行主引导记录。
由于硬盘启动时首先是bios调用自举程序int 19h将主硬盘的0柱面0磁头1扇区的主引导记录读入内存0000:7c00h处执行,而我们已经偷梁换柱,将0柱面0磁头1扇区变为我们自己设计的程序。这样从硬盘启动时,首先执行的不是主引导程序,而是我们设计的程序。在执行我们设计的程序时,口令若不对则无法继续执行,也就无法启动了。即使从软盘启动,由于0柱面0磁头1扇区不再有分区信息,硬盘也不能被访问了。当然还可以将我们设计的程序像病毒一样,将其中一部分驻留在高端内存,监视int 13h的使用,防止0柱面0磁头1扇区被改写。$page_devide$
三、对硬盘实现用户加密管理
unix操作系统可以实现多用户管理,在dos系统下,将硬盘管理系统进行改进,也可实现类似功能的多用户管理。该管理系统可以满足这样一些要求: 1.将硬盘分为公用分区c和若干专用分区d。其中“超级用户”来管理c区,可以对c区进行读写和更新系统;“特别用户”(如机房内部人员)通过口令使用自己的分区,以保护自己的文件和数据;“一般用户”(如到机房上机的普通人员)任意使用划定的公用分区。后两种用户都不能对c盘进行写操作,这样如果把操作系统和大量应用软件装在c盘,就能防止在公共机房中其他人有意或无意地对系统和软件的破坏,保证了系统的安全性和稳定性。 2.在系统启动时,需要使用软盘钥匙盘才能启动系统,否则硬盘被锁住,不能被使用。 此方法的实现可通过利用硬盘分区表中各逻辑盘的分区链表结构,采用汇编编程来实现。
四、对某个逻辑盘实现写保护
我们知道,软盘上有写保护缺口,在对软盘进行写操作前,bios要检查软盘状态,如果写保护缺口被封住,则不能进行写操作。而写保护功能对硬盘而言,在硬件上无法进行,但可通过软件来实现。 在dos系统下,磁盘的写操作包括几种情况:①在command.com支持下的写操作,如md、rd、等;②在dos功能调用中的一些子功能如功能号为10h、13h、3eh、5bh等可以对硬盘进行写操作;③通过int 26h将逻辑扇区转换为绝对扇区进行写;④通过int 13h的子功能号03h、05h等对磁盘进行写操作。 但每一种写操作最后都要调用int 13h的子功能去实现。
因此,如果对int 13h进行拦截,可以实现禁止对硬盘特定逻辑盘的写操作。由于磁盘上文件的写操作是通过int 13h的03h子功能进行写,调用此子功能时,寄存器cl表示起始扇区号(实际上只用到低6位);ch表示磁道号,在硬盘即为柱面号,该柱面号用10位表示,其最高两位放在cl的最高两位。对硬盘进行分区时可以将硬盘分为多个逻辑驱动器,而每个逻辑驱动器都是从某一个完整的柱面开始。如笔者的硬盘为2.5gb,分为c、d、e、f、g五个盘。其中c盘起始柱面号为00h,d盘起始柱面号为66h,e盘起始柱面号为e5h,f盘起始柱面号为164h,g盘起始柱面号为26bh。如果对int 13h进行拦截,当ah=03h,并且由cl高两位和ch共同表示的柱面号大于e4h并小于164h,就什么也不做就返回,这样就可以实现对e盘禁止写。
Ⅵ 文件加密解密
开篇 人生命、要守护,十条法则要记住,一旦灾害发生时,及时应用心有数。 一、地震 遇地震,先躲避,桌子床下找空隙,靠在墙角曲身体,抓住机会逃出去,
Ⅶ 有没有什么加密软件,可以加密一个分区或是文件夹
那就用系统自带的就是右击你要加密的盘启用bitlocker不过那个分区以后都会要M码才能打开了M码千万不能忘记否则要从装系统的我就是WIN7旗舰版的有啊!!XP也有
Ⅷ 用C++写一道完整的加密程序 跪求 加密解密小软件
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
文件操作 API
*/
#define GET_WRITE_FILE_NAME(O) \
{ \
char ftype[10] = {0}; \
char *tmp = 0; \
char *position = 0; \
tmp = (O); \
while(1) \
{ \
position = tmp; \
tmp = strchr(tmp, '.'); \
if(tmp != NULL) \
tmp++; \
else if(position > (O)) \
{ \
strcpy(ftype, position); \
position = position - 1; \
break; \
} \
else \
break; \
} \
if(position != NULL) \
{ \
*position = '\0'; \
strcat((O), "_bak."); \
strcat((O), ftype); \
} \
}
int remove_file(char *fname)
{
if(0 != remove(fname))
return -1;
else
return 0;
}
int rename_file(char *oldname, char *newname)
{
if(0 != rename(oldname, newname))
return -1;
return 0;
}
FILE* open_file_read(char* fname)
{
FILE * f;
f = fopen(fname, "rb");
if(!f)
return NULL;
else
return f;
}
void close_file_read(FILE *f)
{
if(f)
fclose(f);
}
FILE* open_file_write(char* fname)
{
FILE * f;
f = fopen(fname, "wb");
if(!f)
return NULL;
else
return f;
}
void close_file_write(FILE *f)
{
if(f)
fclose(f);
}
int read_byte(FILE *f, char *ch)
{
if(f)
if(fread(ch, 1, 1, f) < 1)
return -1;
return 0;
}
int write_byte(FILE *f, char *ch)
{
if(f)
if(fwrite(ch, 1, 1, f) < 1)
return -1;
return 0;
}
/*
加密解密 API
*/
void decry_encry_byte(char *src, char *dest, char key)
{
if(!src || !dest)
return;
*dest = (*src) ^ key;
}
/*
主函数
*/
void main()
{
char fname[100] = {0};
char fname_bak[100] = {0};
char *pchar;
int i = 0, succeed = -1;
char chr, chw;
char key;
FILE *fr = NULL, *fw = NULL;
pchar = fname;
printf("input in filename you wanna encrypt:\n");
for(;;)
{
if(i == 100)
{
printf("Too complicated file path!!\n");
return;
}
scanf("%c", pchar);
if(*pchar == '\n')
{
*pchar = 0;
break;
}
else
pchar++;
i++;
}
strcpy(fname_bak, fname);
printf("input in encrypt key\n==>: ");
key = getchar();
fr = open_file_read(fname);
if(!fr)
{
printf("No such file!!\n");
goto exit;
}
GET_WRITE_FILE_NAME(fname);
fw = open_file_write(fname);
if(!fw)
{
printf("cant create the file %s!!\n", fname);
goto exit;
}
while(1)
{
if(0 == read_byte(fr, &chr))
{
decry_encry_byte(&chr, &chw, key);
if(0 != write_byte(fw, &chw))
break;
}
else
break;
}
succeed = 0;
exit:
if(fr)
close_file_read(fr);
if(fw)
close_file_write(fw);
if(succeed == 0)
{
remove_file(fname_bak);
rename_file(fname, fname_bak);
}
}
Ⅸ 怎样用U盘快速加密软件
有的软件开发商有这样一种需求,就是使用U盘发布软件的同时,想要节约成本,防止U盘中的软件被复制,但又不想再购买昂贵的加密狗,因此想要把软件绑定在U盘上执行,当U盘拔下来的时候,软件就不能正常运行,和先前介绍的绑定硬件指纹相似,使用绑定U盘的方式加密软件。
在对软件安全不是特别在意的情况下,可以在软件中采用绑定U盘内部ID的方式来实现这种加密,先使用程序将U盘的ID读出来,然后根据这个ID生成License文件,当解密者将U盘内的文件复制到其他电脑的时候,软件执行过程中读取U盘ID失败,因此就无法校验License。
通常情况下两个U盘的ID是不相同的,因此即使将软件复制到另外一个U盘,软件执行的时候,根据U盘ID验证License,也会出现不匹配的现象,这样就实现了软件绑定U盘的加密方式。
需要指出的是,这种U盘加密并不算安全,大多数U盘厂商有内部量产工具,可以修改U盘的内部ID号码,这就存在了复制U盘的可能性,但对于普通用户来说,通常没有修改U盘内部ID的能力,因此也具有一定的加密性。
这个加密方法中,读取U盘ID号的函数的VB源代码如下所示:
Se t objW MISe rvice = Ge tObject("winmg mts:\.ro otcimv2")
Se t colIte ms = objWMISer vice.E xecQ uery("Select * Fro m Wi n32_US BHub")
F or Ea ch objIte m In colI tems
a = o bjItem.De viceID
If In Str(a, "VI D") The n b = Sp lit(a, "")
US B_ID = b(UBound(b))
Ne xt
Ⅹ 求 VC++编写的文件夹加密软件代码 (其他工具也可以)~~·求 文件夹 加密的啊~~不是文件加密
// AesCodeDlg.cpp : implementation file
//
#include "stdafx.h"
#include "AesCode.h"
#include "AesCodeDlg.h"
#include "Aes.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum ;
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAesCodeDlg dialog
CAesCodeDlg::CAesCodeDlg(CWnd* pParent /*=NULL*/)
: CDialog(CAesCodeDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CAesCodeDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CAesCodeDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAesCodeDlg)
DDX_Control(pDX, IDC_EnDeProg, m_prog);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAesCodeDlg, CDialog)
//{{AFX_MSG_MAP(CAesCodeDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BAesEn, OnBAesEn)
ON_BN_CLICKED(IDC_BAesDe, OnBAesDe)
ON_BN_CLICKED(IDC_BFile, OnBFile)
ON_BN_CLICKED(IDC_BFileEn, OnBFileEn)
ON_BN_CLICKED(IDC_BFileDe, OnBFileDe)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAesCodeDlg message handlers
BOOL CAesCodeDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
SetDlgItemText(IDC_EAesEn,"0123456789abcdef");
EnDe_filename="";
m_prog.SetRange(0,100);
m_prog.SetPos(0);
return TRUE; // return TRUE unless you set the focus to a control
}
void CAesCodeDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CAesCodeDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CAesCodeDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
////////////////////////////////////////////////////////////////////////////////////////////////
//Aes字符串加密
void CAesCodeDlg::OnBAesEn()
{
// TODO: Add your control notification handler code here
unsigned char inBuff[25],ouBuff[25];
memset(inBuff,0,25);
memset(ouBuff,0,25);
Aes aes(24,(unsigned char*)"\x0\x1\x2\x3\x4\x5\x6\x7\x8\x9\xa\xb\xc\xd\xe\xf\x10\x11\x12\x13\x14\x15\x16\x17");
GetDlgItemText(IDC_EAesEn,(char*)inBuff,24);
if(strlen((char*)inBuff)>16)MessageBox("本例只能加密16字节的字符串,大于截断");
aes.Cipher(inBuff,ouBuff); //因为输出为16个字节,每个字节用两个字母或数字表示。
CString str="",strTmp; //实际输出是32个字母或数字,否则ASCII码值超出127的会变成乱码。
for(int i=0;i<16;i++)
{
strTmp.Format("%02x",ouBuff[i]); //其实相当于把ouBuff的ASCII值这个数字以16进制的形式输出
str+=strTmp;
}
//MessageBox(str,"加密后");
SetDlgItemText(IDC_EAesEn,str);
}
////////////////////////////////////////////////////////////////////////////////////////////////
//Aes字符串解密
void CAesCodeDlg::OnBAesDe()
{
// TODO: Add your control notification handler code here
unsigned char inBuff[33],ouBuff[25]; //还是要注意32个字符的字符串需要用33个字节来存储,
//因为有个结束符,太恶心了
memset(inBuff,0,32);
memset(ouBuff,0,25);
Aes aes(24,(unsigned char*)"\x0\x1\x2\x3\x4\x5\x6\x7\x8\x9\xa\xb\xc\xd\xe\xf\x10\x11\x12\x13\x14\x15\x16\x17");
GetDlgItemText(IDC_EAesEn,(char*)inBuff,33);
unsigned char temp[25];
for(int j=0;j<16;j++)
{
temp[j]=char2num(inBuff[2*j])*16+char2num(inBuff[2*j+1]);// 将字符字面表示的16进制ASCII码值转换成真正的ASCII码值
}
aes.InvCipher(temp,ouBuff);//"dda97ca4......ec0d7191"
SetDlgItemText(IDC_EAesDe,CString(ouBuff));
}
////////////////////////////////////////////////////////////////////////////////////////////////
//字符ASCII码值到字符字面值的转换 如 '0'转换成0, 'a'转换成10
int CAesCodeDlg::char2num(char ch)
{
if(ch>='0'&&ch<='9')return ch-'0';
else if(ch>='a'&&ch<='f')return ch-'a'+10;
return -1;
}
////////////////////////////////////////////////////////////////////////////////////////////////
//文件选择框
void CAesCodeDlg::OnBFile()
{
// TODO: Add your control notification handler code here
CFileDialog fdlg(1,NULL,NULL,OFN_HIDEREADONLY ,"All Files(*.*)|*.*||");
if(IDOK!=fdlg.DoModal())return;
EnDe_filename=fdlg.GetPathName();
SetDlgItemText(IDC_EFile,EnDe_filename);
}
////////////////////////////////////////////////////////////////////////////////////////////////
//Aes文件加密
void CAesCodeDlg::OnBFileEn()
{
// TODO: Add your control notification handler code here
if(EnDe_filename=="")return;
FILE* finput;
FILE* foutput;
finput=fopen((LPCTSTR)EnDe_filename,"rb");
if(!finput)
{
MessageBox("文件打开错误","出错",MB_OK);
return;
}
fseek(finput,0,SEEK_END);
long lFileLen=ftell(finput); //ftell()函数返回文件位置指示符的当前值,即如果现在是在文件结尾,则这个值就是文件长度
fseek(finput,0,SEEK_SET);
long blocknum=lFileLen/16;
long leftnum=lFileLen%16;
EnDe_filename+=".en";
foutput=fopen((LPCTSTR)EnDe_filename,"wb");
if(!foutput)
{
MessageBox("文件打开错误","出错",MB_OK);
fclose(finput);
return;
}
unsigned char inBuff[25],ouBuff[25];
Aes aes(16,(unsigned char*)"\x0\x1\x2\x3\x4\x5\x6\x7\x8\x9\xa\xb\xc\xd\xe\xf");
for(long i=0;i<blocknum;i++)
{
fread(inBuff,1,16,finput); //读取16个对象,每个对象的长度是1字节
aes.Cipher(inBuff,ouBuff);
fwrite(ouBuff,1,16,foutput);
m_prog.SetPos(int(100*i/blocknum)); //加密进度条进度设置
}
if(leftnum)
{
memset(inBuff,0,16);
fread(inBuff,1,leftnum,finput);
aes.Cipher(inBuff,ouBuff);
fwrite(ouBuff,1,16,foutput);
}
fclose(finput);
fclose(foutput);
MessageBox("加密成功!");
SetDlgItemText(IDC_EFile,EnDe_filename);
m_prog.SetPos(0);
}
////////////////////////////////////////////////////////////////////////////////////////////////
//Aes文件解密
void CAesCodeDlg::OnBFileDe()
{
// TODO: Add your control notification handler code here
if(EnDe_filename=="")return;
FILE* finput;
FILE* foutput;
finput=fopen((LPCTSTR)EnDe_filename,"rb");
if(!finput)
{
MessageBox("文件打开错误","出错",MB_OK);
return;
}
fseek(finput,0,SEEK_END);
long lFileLen=ftell(finput); //ftell()函数返回文件位置指示符的当前值,即如果现在是在文件结尾,则这个值就是文件长度
fseek(finput,0,SEEK_SET);
long blocknum=lFileLen/16;
long leftnum=lFileLen%16;
EnDe_filename+=".de";
foutput=fopen((LPCTSTR)EnDe_filename,"wb");
if(!foutput)
{
MessageBox("文件打开错误","出错",MB_OK);
fclose(finput);
return;
}
unsigned char inBuff[25],ouBuff[25];
Aes aes(16,(unsigned char*)"\x0\x1\x2\x3\x4\x5\x6\x7\x8\x9\xa\xb\xc\xd\xe\xf");
for(long i=0;i<blocknum;i++)
{
fread(inBuff,1,16,finput); //读取16个对象,每个对象的长度是1字节
aes.InvCipher(inBuff,ouBuff);
fwrite(ouBuff,1,16,foutput);
m_prog.SetPos(int(100*i/blocknum)); //加密进度条进度设置
}
if(leftnum)
{
MessageBox("文件可能已损坏或非经aes加密过");
}
fclose(finput);
fclose(foutput);
MessageBox("解密成功!");
SetDlgItemText(IDC_EFile,EnDe_filename);
m_prog.SetPos(0);
}
要源程序和全部代码给我邮箱我给你发过去。