Delphi使用CRC加密算法對文件加密的例子。CRC就是簡單的用一個固定的數K去XOR待檢的串A,得出的余數R附加在這個A上給傳輸出去。在接收端,用同樣的這個數再去XOR。由於A XOR K=R,而B=A+R,如果傳輸過程沒有錯出錯,則B XOR K=(A+R)XOR K=R XOR k=0,校驗成功。(XOR是按位運算的)。CRC定義:在遠距離數據通信中,為確保高效而無差錯地傳送數據,必須對數據進行校驗,即差錯控制。循環冗余校驗CRC是對一個傳送數據塊進行校驗,是一種高效的差錯控制方法。
Delphi CRC文件加密,例子代碼:
01
unit
Unit1;
02
interface
03
uses
04
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
05
Dialogs, StdCtrls, Buttons;
06
type
07
TForm1 =
class
(TForm)
08
Button1: TButton;
09
Edit1: TEdit;
10
SpeedButton1: TSpeedButton;
11
OpenDialog1: TOpenDialog;
12
procedure
Button1Click(Sender: TObject);
13
procedure
SpeedButton1Click(Sender: TObject);
14
private
15
procedure
CalcCRC32(FileName:
String
;
var
CRC32: dWord);
16
{ Private declarations }
17
public
18
{ Public declarations }
19
end
;
20
var
21
Form1: TForm1;
22
Fname :
String
;
23
implementation
24
{$R *.dfm}
25
const
Table:
Array
[
0..255
]
of
DWord =
26
(
$00000000
,
$77073096
,
$EE0E612C
,
$990951BA
,
$076DC419
,
$706AF48F
,
$E963A535
,
$9E6495A3
,
$0EDB8832
,
$79DCB8A4
,
$E0D5E91E
,
$97D2D988
,
27
$09B64C2B
,
$7EB17CBD
,
$E7B82D07
,
$90BF1D91
,
$1DB71064
,
$6AB020F2
,
$F3B97148
,
$84BE41DE
,
$1ADAD47D
,
$6DDDE4EB
,
$F4D4B551
,
$83D385C7
,
28
$136C9856
,
$646BA8C0
,
$FD62F97A
,
$8A65C9EC
,
$14015C4F
,
$63066CD9
,
$FA0F3D63
,
$8D080DF5
,
$3B6E20C8
,
$4C69105E
,
$D56041E4
,
$A2677172
,
29
$3C03E4D1
,
$4B04D447
,
$D20D85FD
,
$A50AB56B
,
$35B5A8FA
,
$42B2986C
,
$DBBBC9D6
,
$ACBCF940
,
$32D86CE3
,
$45DF5C75
,
$DCD60DCF
,
$ABD13D59
,
30
$26D930AC
,
$51DE003A
,
$C8D75180
,
$BFD06116
,
$21B4F4B5
,
$56B3C423
,
$CFBA9599
,
$B8BDA50F
,
$2802B89E
,
$5F058808
,
$C60CD9B2
,
$B10BE924
,
31
$2F6F7C87
,
$58684C11
,
$C1611DAB
,
$B6662D3D
,
$76DC4190
,
$01DB7106
,
$98D220BC
,
$EFD5102A
,
$71B18589
,
$06B6B51F
,
$9FBFE4A5
,
$E8B8D433
,
32
$7807C9A2
,
$0F00F934
,
$9609A88E
,
$E10E9818
,
$7F6A0DBB
,
$086D3D2D
,
$91646C97
,
$E6635C01
,
$6B6B51F4
,
$1C6C6162
,
$856530D8
,
$F262004E
,
33
$6C0695ED
,
$1B01A57B
,
$8208F4C1
,
$F50FC457
,
$65B0D9C6
,
$12B7E950
,
$8BBEB8EA
,
$FCB9887C
,
$62DD1DDF
,
$15DA2D49
,
$8CD37CF3
,
$FBD44C65
,
34
$4DB26158
,
$3AB551CE
,
$A3BC0074
,
$D4BB30E2
,
$4ADFA541
,
$3DD895D7
,
$A4D1C46D
,
$D3D6F4FB
,
$4369E96A
,
$346ED9FC
,
$AD678846
,
$DA60B8D0
,
35
$44042D73
,
$33031DE5
,
$AA0A4C5F
,
$DD0D7CC9
,
$5005713C
,
$270241AA
,
$BE0B1010
,
$C90C2086
,
$5768B525
,
$206F85B3
,
$B966D409
,
$CE61E49F
,
36
$5EDEF90E
,
$29D9C998
,
$B0D09822
,
$C7D7A8B4
,
$59B33D17
,
$2EB40D81
,
$B7BD5C3B
,
$C0BA6CAD
,
$EDB88320
,
$9ABFB3B6
,
$03B6E20C
,
$74B1D29A
,
37
$EAD54739
,
$9DD277AF
,
$04DB2615
,
$73DC1683
,
$E3630B12
,
$94643B84
,
$0D6D6A3E
,
$7A6A5AA8
,
$E40ECF0B
,
$9309FF9D
,
$0A00AE27
,
$7D079EB1
,
38
$F00F9344
,
$8708A3D2
,
$1E01F268
,
$6906C2FE
,
$F762575D
,
$806567CB
,
$196C3671
,
$6E6B06E7
,
$FED41B76
,
$89D32BE0
,
$10DA7A5A
,
$67DD4ACC
,
39
$F9B9DF6F
,
$8EBEEFF9
,
$17B7BE43
,
$60B08ED5
,
$D6D6A3E8
,
$A1D1937E
,
$38D8C2C4
,
$4FDFF252
,
$D1BB67F1
,
$A6BC5767
,
$3FB506DD
,
$48B2364B
,
40
$D80D2BDA
,
$AF0A1B4C
,
$36034AF6
,
$41047A60
,
$DF60EFC3
,
$A867DF55
,
$316E8EEF
,
$4669BE79
,
$CB61B38C
,
$BC66831A
,
$256FD2A0
,
$5268E236
,
41
$CC0C7795
,
$BB0B4703
,
$220216B9
,
$5505262F
,
$C5BA3BBE
,
$B2BD0B28
,
$2BB45A92
,
$5CB36A04
,
$C2D7FFA7
,
$B5D0CF31
,
$2CD99E8B
,
$5BDEAE1D
,
42
$9B64C2B0
,
$EC63F226
,
$756AA39C
,
$026D930A
,
$9C0906A9
,
$EB0E363F
,
$72076785
,
$05005713
,
$95BF4A82
,
$E2B87A14
,
$7BB12BAE
,
$0CB61B38
,
43
$92D28E9B
,
$E5D5BE0D
,
$7CDCEFB7
,
$0BDBDF21
,
$86D3D2D4
,
$F1D4E242
,
$68DDB3F8
,
$1FDA836E
,
$81BE16CD
,
$F6B9265B
,
$6FB077E1
,
$18B74777
,
44
$88085AE6
,
$FF0F6A70
,
$66063BCA
,
$11010B5C
,
$8F659EFF
,
$F862AE69
,
$616BFFD3
,
$166CCF45
,
$A00AE278
,
$D70DD2EE
,
$4E048354
,
$3903B3C2
,
45
$A7672661
,
$D06016F7
,
$4969474D
,
$3E6E77DB
,
$AED16A4A
,
$D9D65ADC
,
$40DF0B66
,
$37D83BF0
,
$A9BCAE53
,
$DEBB9EC5
,
$47B2CF7F
,
$30B5FFE9
,
46
$BDBDF21C
,
$CABAC28A
,
$53B39330
,
$24B4A3A6
,
$BAD03605
,
$CDD70693
,
$54DE5729
,
$23D967BF
,
$B3667A2E
,
$C4614AB8
,
$5D681B02
,
$2A6F2B94
,
47
$B40BBE37
,
$C30C8EA1
,
$5A05DF1B
,
$2D02EF8D
);
48
procedure
TForm1
.
Button1Click(Sender: TObject);
49
var
50
crc :dWord;
51
begin
52
if
Fname<>
''
then
53
begin
54
CalcCRC32(Fname,crc);
55
if
crc<>
0
then
56
ShowMessage(IntToHex(crc,
6
));
57
end
58
else
59
showmessage(
'請選擇指定文件的路徑。'
);
60
end
;
61
procedure
TForm1
.
CalcCRC32(FileName:
String
;
var
CRC32: dWord);
62
var
F:
file
;
63
BytesRead: dWord;
64
Buffer:
Array
[
1..65521
]
of
byte
;
65
i:
Word
;
66
begin
67
FileMode :=
0
;
68
CRC32 :=
$ffffffff
;
69
{
$I
-}
70
AssignFile(F,FileName);
71
Reset(F,
1
);
72
if
IOResult =
0
then
73
begin
74
repeat
75
BlockRead(F,Buffer,SizeOf(Buffer),BytesRead);
76
for
i :=
1
to
BytesRead
do
77
CRC32 := (CRC32
shr
8
)
xor
Table[Buffer[i]
xor
(CRC32
and
$000000FF
)];
78
until
BytesRead =
0
;
79
end
;
80
CloseFile(F);
81
{
$I
+}
82
CRC32 :=
not
CRC32;
83
end
;
84
procedure
TForm1
.
SpeedButton1Click(Sender: TObject);
85
begin
86
if
OpenDialog1
.
Execute
then
87
begin
88
Edit1
.
Text := OpenDialog1
.
FileName;
89
Fname := Trim(Edit1
.
Text);
90
end
91
else
92
begin
93
Edit1
.
Text :=
''
;
94
Fname :=
''
;
95
end
;
96
end
;
97
end
.
可視化運行效果: