文件加密:成熟版
pascal吧
全部回复
仅看楼主
level 8
徐一凡_exe 楼主
特别感谢:@139457820
+适用于所有文件(上一版本只能处理不含有 26号字符 的文件,也就是几乎只能处理文本文档)
+适用于文件名超级长的文件(上一版本只能处理string范围)
-可处理的文件的大小限制为 17179869184GB(上一版本为无限制),超过了就无法处理了,这是此版本最大的缺点。
2017年04月08日 01点04分 1
level 8
徐一凡_exe 楼主
对于大小限制这一缺点,我只能说我做的还不够好。
2017年04月08日 01点04分 2
level 8
徐一凡_exe 楼主
链接楼
2017年04月08日 01点04分 3
https:/[彩虹]/pan.baidu.com/s/1bpN8m9h
2017年04月08日 01点04分
level 8
徐一凡_exe 楼主
同样开源:
2017年04月08日 01点04分 4
level 8
徐一凡_exe 楼主
V1代码:
uses dos;
var c:char;
m,s2:string;
s:ansistring;
f3:file of char;
f,f2:text;
d,i,j:longint;
size:qword;
function jamchr(c,c2:char):char;
begin
inc(c,ord(c2));
exit(c);
end;
function jemchr(c,c2:char):char;
begin
dec(c,ord(c2));
exit(c);
end;
procedure chrkey(s:string);
begin
readln(c);
while pos(c,s)=0 do readln(c);
end;
procedure clrscr;
begin
exec('cmd','/c cls');
end;
procedure jam;
begin
clrscr;
write('请输入要加密的文件的路径:');
readln(s);
if fsearch(s,'')='' then exit;
assign(f3,s);
reset(f3);
size:=filesize(f3);
close(f3);
assign(f,s);
reset(f);
s:=s+'.xmm';
if fsearch(s,'')<>'' then begin
writeln(s,'已存在,如果继续进行则会失去该文件的原内容。现在您可以进行备份。');
writeln('继 续(1)');
writeln('返回菜单(2)');
chrkey('12');
if c='2' then begin
close(f);
exit;
end;
end;
i:=0;
write('请输入要加密的文件的密码:');
readln(m);
if m='' then exit;
d:=length(m);
writeln('加密中······');
assign(f2,s);
rewrite(f2);
write(f2,jamchr(chr(d),m[i+1]));
for j:=1 to d do begin
i:=(i+1)mod d;
write(f2,jamchr(m[j],m[i+1]));
end;
while size>0 do begin
i:=(i+1)mod d;
read(f,c);
write(f2,jamchr(c,m[i+1]));
dec(size);
end;
close(f);
close(f2);
c:='1';
write('加密完成。');
readln;
end;
procedure jem;
begin
clrscr;
write('请输入要解密的文件的路径:');
readln(s);
if (fsearch(s,'')='')or(copy(s,length(s)-3,4)<>'.xmm') then exit;
assign(f3,s);
reset(f3);
size:=filesize(f3);
close(f3);
assign(f,s);
reset(f);
delete(s,length(s)-3,4);
if fsearch(s,'')<>'' then begin
writeln(s,'已存在,如果继续进行则会失去该文件的原内容。现在您可以进行备份。');
writeln('继 续(1)');
writeln('返回菜单(2)');
chrkey('12');
if c='2' then begin
close(f);
exit;
end;
end;
write('请输入要解密的文件的密码:');
readln(m);
if m='' then exit;
d:=length(m);
i:=0;
read(f,c);
dec(size);
c:=jemchr(c,m[i+1]);
if ord(c)<>d then begin
write('密码错误,为防止强制破解密码,请回到主菜单。');
close(f);
readln;
c:='1';
exit;
end;
s2:='';
for j:=1 to d do begin
i:=(i+1)mod d;
read(f,c);
s2:=s2+jemchr(c,m[i+1]);
end;
dec(size,d);
if s2<>m then begin
write('密码错误,为防止强制破解密码,请回到主菜单。');
close(f);
readln;
c:='1';
exit;
end;
assign(f2,s);
rewrite(f2);
writeln('解密中······');
while size>0 do begin
i:=(i+1)mod d;
read(f,c);
write(f2,jemchr(c,m[i+1]));
dec(size);
end;
close(f);
close(f2);
c:='1';
write('解密完成。');
readln;
end;
begin
exec('cmd','/c title 文件加密V1');
clrscr;
c:='1';
while pos(c,'123')>0 do begin
clrscr;
writeln('文件密码软件V1');
writeln('加密文件(1)');
writeln('解密文件(2)');
writeln('查看版权(3)');
writeln('退出软件(4)');
chrkey('1234');
case c of
'1':jam;
'2':jem;
'3':begin
clrscr;
writeln('软件制作:徐一凡');
writeln('代码版权:作者');
writeln('联系:百度贴吧“徐一凡_exe” 邮箱“[email protected]”');
writeln('对于关于本软件代码的一切查看、修改,均要经作者同意。');
readln;
end;
end;
clrscr;
end;
end.
2017年04月08日 01点04分 5
level 8
徐一凡_exe 楼主
V2代码:
uses dos;
var c:char;
m,s2:string;
s:ansistring;
f3:file of char;
f,f2:text;
d,i,j:longint;
size:qword;
function jmchr(a,b:char):char;
begin
exit(chr(ord(a) xor ord(b)));
end;
procedure chrkey(s:string);
begin
readln(c);
while pos(c,s)=0 do readln(c);
end;
procedure clrscr;
begin
exec('cmd','/c cls');
end;
procedure jam;
begin
clrscr;
write('请输入要加密的文件的路径:');
readln(s);
if fsearch(s,'')='' then exit;
assign(f3,s);
reset(f3);
size:=filesize(f3);
close(f3);
assign(f,s);
reset(f);
s:=s+'.xm2';
if fsearch(s,'')<>'' then begin
writeln(s,'已存在,如果继续进行则会失去该文件的原内容。现在您可以进行备份。');
writeln('继 续(1)');
writeln('返回菜单(2)');
chrkey('12');
if c='2' then begin
close(f);
exit;
end;
end;
write('请输入要加密的文件的密码:');
readln(m);
if m='' then exit;
writeln('加密中······');
d:=length(m);
assign(f2,s);
rewrite(f2);
i:=0;
write(f2,jmchr(chr(d),m[i+1]));
for j:=1 to d do begin
i:=(i+1)mod d;
write(f2,jmchr(m[j],m[i+1]));
end;
while size>0 do begin
i:=(i+1)mod d;
read(f,c);
write(f2,jmchr(c,m[i+1]));
dec(size);
end;
close(f);
close(f2);
c:='1';
write('加密完成。');
readln;
end;
procedure jem;
begin
clrscr;
write('请输入要解密的文件的路径:');
readln(s);
if (fsearch(s,'')='')or(copy(s,length(s)-3,4)<>'.xm2') then exit;
assign(f3,s);
reset(f3);
size:=filesize(f3);
close(f3);
assign(f,s);
reset(f);
delete(s,length(s)-3,4);
if fsearch(s,'')<>'' then begin
writeln(s,'已存在,如果继续进行则会失去该文件的原内容。现在您可以进行备份。');
writeln('继 续(1)');
writeln('返回菜单(2)');
chrkey('12');
if c='2' then begin
close(f);
exit;
end;
end;
write('请输入要解密的文件的密码:');
readln(m);
if m='' then exit;
d:=length(m);
i:=0;
read(f,c);
dec(size);
c:=jmchr(c,m[i+1]);
if ord(c)<>d then begin
write('密码错误,为防止强制破解密码,请回到主菜单。');
close(f);
readln;
c:='1';
exit;
end;
s2:='';
for j:=1 to d do begin
i:=(i+1)mod d;
read(f,c);
s2:=s2+jmchr(c,m[i+1]);
end;
dec(size,d);
if s2<>m then begin
write('密码错误,为防止强制破解密码,请回到主菜单。');
close(f);
readln;
c:='1';
exit;
end;
assign(f2,s);
rewrite(f2);
writeln('解密中······');
while size>0 do begin
i:=(i+1)mod d;
read(f,c);
write(f2,jmchr(c,m[i+1]));
dec(size);
end;
close(f);
close(f2);
c:='1';
write('解密完成。');
readln;
end;
begin
exec('cmd','/c title 文件加密V2');
clrscr;
c:='1';
while pos(c,'123')>0 do begin
clrscr;
writeln('文件密码软件V2');
writeln('加密文件(1)');
writeln('解密文件(2)');
writeln('查看版权(3)');
writeln('退出软件(4)');
chrkey('1234');
case c of
'1':jam;
'2':jem;
'3':begin
clrscr;
writeln('软件制作:徐一凡');
writeln('代码版权:作者');
writeln('联系:百度贴吧“徐一凡_exe” 邮箱“[email protected]”');
writeln('对于关于本软件代码的一切查看、修改,均要经作者同意。');
readln;
end;
end;
clrscr;
end;
end.
2017年04月08日 01点04分 6
level 8
徐一凡_exe 楼主
求大神攻破。
至于问什么我不加注释,有两个原因:
1:这只是一个小程序。
2:确保加密算法可靠的最好方法之一,就是让大神看不懂[滑稽]加密算法。
2017年04月08日 01点04分 7
level 8
徐一凡_exe 楼主
2017年04月08日 01点04分 8
如果一个加密算法,在得到加密/解密源码的情况下,依然无法被低复杂度的算法破解,则该加密算法是优秀的比如rar,而且rar必须在解压完全后才知道密码是否正确。
2017年04月08日 02点04分
可是你也不知道这算法是不是优秀的。
2017年04月08日 02点04分
[不高兴]
2017年04月08日 02点04分
。。这个加密方法比较简单、如果要别人只能用暴力破解,一般可以用大质数乱搞
2017年04月08日 02点04分
level 8
徐一凡_exe 楼主
2017年04月08日 01点04分 9
希望大神降临!
2017年04月08日 01点04分
太长不看。
2017年04月13日 07点04分
2017年04月13日 07点04分
level 8
徐一凡_exe 楼主
我只想知道有什么破绽
2017年04月08日 04点04分 10
level 14
今天考试乱差,心情乱差。看到泥萌如此有活力,还能编代码,突然想要治治各种不服。
看到你代码风格精奇,不是特别难看,所以稍微读了下就发现漏洞百出。
比如说那个V2,一看就知道,这个加密违反了密码的唯一性啊!本来还想构造组数据让你错的,结果大文件很容易出错。具体你可以看我写的破解密码程序,他会破解出若干个可行密码,当然这些密码里只有1个是对的,而且使用另外错误的密码,你的程序是不会报错的。这个破译密码的程序时间复杂度也是很低的。
uses SysUtils;
var
f:Text;
s:ansistring;
Cnt,Len,XorSum:longint;
c,Ans:array[0..305]of char;
procedure Hack;
var
pass:ansistring='';
n,i:longint;
begin
n:=Len-1;
Ans[1]:=char(ord(c[1])xor ord(n));
for i:=2 to n do Ans[i]:=char(ord(c[i])xor ord(Ans[i-1]));
if ord(Ans[1])xor ord(Ans[n])=ord(c[Len]) then
begin
inc(Cnt);
write('[----- Possible Solution ',Cnt,' -----] Password=');
for i:=1 to n do write(Ans[i]);
writeln
end
end;
begin
write('[----- Key in the file you want to hack! -----] FileName=');
readln(s);
if not FileExists(s) then
begin
write('[----- Error -----] File not exist!');
readln;
halt
end;
assign(f,s);
reset(f);
Len:=1;
read(f,c[1]);
XorSum:=0;
Cnt:=0;
repeat
inc(Len);
read(f,c[Len]);
XorSum:=XorSum xor ord(c[Len]);
if XorSum=0 then Hack
until Len>257;
close(f)
end.
2017年04月08日 10点04分 11
事实证明,把密码明文放到加密后的文件里是个错误。。至于V1我没看但估计也随便破解。你一定要一些高超的技巧啊!具体你可以看下RSA公钥加密什么的,用1024位的大质数去搞啊
2017年04月08日 10点04分
两位是大袖啊!
2017年04月08日 10点04分
@徐一凡_exe 其实我对加密了解也不深。但是你至少可以做到一个简单加密而且没有出错。如果不公布源码的话,破解过程应当十分困难。
2017年04月08日 10点04分
@139457820 然而我并没有把密码明文放进去,您怎么理解的? 我只是小学生,没有什么牛的技术。
2017年04月08日 10点04分
level 11
17179869184GB如何计算?有什么文件系统支持16777216TB的文件?
2017年04月09日 01点04分 12
不要在意这些数字,这只是显得楼主很吊的数字[呵呵]
2017年04月09日 03点04分
@zsj12345678999 [滑稽]一脸怀疑 @徐一凡_exe 来解释一下怎么算的
2017年04月09日 05点04分
我用qword来储存文件的处理剩余的字节数,我又用计算器[滑稽]算了一下。 就是这么算的。
2017年04月09日 07点04分
2017年04月09日 07点04分
level 1
hehe
2017年04月22日 12点04分 13
不到15字,你是在顶我的楼还是在水贴?
2017年04月22日 22点04分
1