📄 clsblowfish.cls
字号:
Call PutWord(RightWord, byteArray(), Offset + 4)
If Offset >= NextPercent Then
CurrPercent = Int((Offset / CipherLen) * 100)
NextPercent = (CipherLen * ((CurrPercent + 1) / 100)) + 1
RaiseEvent Progress(CurrPercent)
End If
Next
Call CopyMem(OrigLen, byteArray(8), 4)
If (CipherLen - OrigLen > 19) Or (CipherLen - OrigLen < 12) Then Call Err.Raise(vbObjectError, , "Incorrect size descriptor in Blowfish decryption")
Call CopyMem(byteArray(0), byteArray(12), OrigLen)
ReDim Preserve byteArray(OrigLen - 1)
If CurrPercent <> 100 Then RaiseEvent Progress(100)
ErrorHandler:
End Sub
Private Static Function f(ByVal x As Long) As Long
Dim xb(0 To 3) As Byte
Call CopyMem(xb(0), x, 4)
If (m_RunningCompiled) Then f = (((m_sBox(0, xb(3)) + m_sBox(1, xb(2))) Xor m_sBox(2, xb(1))) + m_sBox(3, xb(0))) Else f = UnsignedAdd((UnsignedAdd(m_sBox(0, xb(3)), m_sBox(1, xb(2))) Xor m_sBox(2, xb(1))), m_sBox(3, xb(0)))
End Function
Private Static Sub GetWord(LongValue As Long, CryptBuffer() As Byte, Offset As Long)
Dim bb(0 To 3) As Byte
bb(3) = CryptBuffer(Offset)
bb(2) = CryptBuffer(Offset + 1)
bb(1) = CryptBuffer(Offset + 2)
bb(0) = CryptBuffer(Offset + 3)
Call CopyMem(LongValue, bb(0), 4)
End Sub
Private Static Sub PutWord(LongValue As Long, CryptBuffer() As Byte, Offset As Long)
Dim bb(0 To 3) As Byte
Call CopyMem(bb(0), LongValue, 4)
CryptBuffer(Offset) = bb(3)
CryptBuffer(Offset + 1) = bb(2)
CryptBuffer(Offset + 2) = bb(1)
CryptBuffer(Offset + 3) = bb(0)
End Sub
Private Static Function UnsignedAdd(ByVal Data1 As Long, Data2 As Long) As Long
Dim x1(0 To 3) As Byte, x2(0 To 3) As Byte, xx(0 To 3) As Byte, Rest As Long, Value As Long, a As Long
Call CopyMem(x1(0), Data1, 4)
Call CopyMem(x2(0), Data2, 4)
Rest = 0
For a = 0 To 3
Value = CLng(x1(a)) + CLng(x2(a)) + Rest
xx(a) = Value And 255
Rest = Value \ 256
Next
Call CopyMem(UnsignedAdd, xx(0), 4)
End Function
Private Function UnsignedDel(Data1 As Long, Data2 As Long) As Long
Dim x1(0 To 3) As Byte, x2(0 To 3) As Byte, xx(0 To 3) As Byte, Rest As Long, Value As Long, a As Long
Call CopyMem(x1(0), Data1, 4)
Call CopyMem(x2(0), Data2, 4)
Call CopyMem(xx(0), UnsignedDel, 4)
For a = 0 To 3
Value = CLng(x1(a)) - CLng(x2(a)) - Rest
If (Value < 0) Then
Value = Value + 256
Rest = 1
Else
Rest = 0
End If
xx(a) = Value
Next
Call CopyMem(UnsignedDel, xx(0), 4)
End Function
Public Property Let Key(New_Value As String)
Dim i As Long, j As Long, K As Long, dataX As Long, datal As Long, datar As Long, Key() As Byte, KeyLength As Long
Class_Initialize
If (m_KeyValue = New_Value) Then Exit Property
m_KeyValue = New_Value
KeyLength = Len(New_Value)
Key() = StrConv(New_Value, vbFromUnicode)
j = 0
For i = 0 To (Rounds + 1)
dataX = 0
For K = 0 To 3
Call CopyMem(ByVal VarPtr(dataX) + 1, dataX, 3)
dataX = (dataX Or Key(j))
j = j + 1
If (j >= KeyLength) Then j = 0
Next
m_pBox(i) = m_pBox(i) Xor dataX
Next
datal = 0: datar = 0
For i = 0 To (Rounds + 1) Step 2
Call EncryptBlock(datal, datar)
m_pBox(i) = datal
m_pBox(i + 1) = datar
Next
For i = 0 To 3
For j = 0 To 255 Step 2
Call EncryptBlock(datal, datar)
m_sBox(i, j) = datal
m_sBox(i, j + 1) = datar
Next
Next
End Property
Private Sub Class_Initialize()
On Local Error Resume Next
m_RunningCompiled = ((2147483647 + 1) < 0)
m_pBox(0) = &H243F6A88
m_pBox(1) = &H85A308D3
m_pBox(2) = &H13198A2E
m_pBox(3) = &H3707344
m_pBox(4) = &HA4093822
m_pBox(5) = &H299F31D0
m_pBox(6) = &H82EFA98
m_pBox(7) = &HEC4E6C89
m_pBox(8) = &H452821E6
m_pBox(9) = &H38D01377
m_pBox(10) = &HBE5466CF
m_pBox(11) = &H34E90C6C
m_pBox(12) = &HC0AC29B7
m_pBox(13) = &HC97C50DD
m_pBox(14) = &H3F84D5B5
m_pBox(15) = &HB5470917
m_pBox(16) = &H9216D5D9
m_pBox(17) = &H8979FB1B
m_sBox(0, 0) = &HD1310BA6
m_sBox(1, 0) = &H98DFB5AC
m_sBox(2, 0) = &H2FFD72DB
m_sBox(3, 0) = &HD01ADFB7
m_sBox(0, 1) = &HB8E1AFED
m_sBox(1, 1) = &H6A267E96
m_sBox(2, 1) = &HBA7C9045
m_sBox(3, 1) = &HF12C7F99
m_sBox(0, 2) = &H24A19947
m_sBox(1, 2) = &HB3916CF7
m_sBox(2, 2) = &H801F2E2
m_sBox(3, 2) = &H858EFC16
m_sBox(0, 3) = &H636920D8
m_sBox(1, 3) = &H71574E69
m_sBox(2, 3) = &HA458FEA3
m_sBox(3, 3) = &HF4933D7E
m_sBox(0, 4) = &HD95748F
m_sBox(1, 4) = &H728EB658
m_sBox(2, 4) = &H718BCD58
m_sBox(3, 4) = &H82154AEE
m_sBox(0, 5) = &H7B54A41D
m_sBox(1, 5) = &HC25A59B5
m_sBox(2, 5) = &H9C30D539
m_sBox(3, 5) = &H2AF26013
m_sBox(0, 6) = &HC5D1B023
m_sBox(1, 6) = &H286085F0
m_sBox(2, 6) = &HCA417918
m_sBox(3, 6) = &HB8DB38EF
m_sBox(0, 7) = &H8E79DCB0
m_sBox(1, 7) = &H603A180E
m_sBox(2, 7) = &H6C9E0E8B
m_sBox(3, 7) = &HB01E8A3E
m_sBox(0, 8) = &HD71577C1
m_sBox(1, 8) = &HBD314B27
m_sBox(2, 8) = &H78AF2FDA
m_sBox(3, 8) = &H55605C60
m_sBox(0, 9) = &HE65525F3
m_sBox(1, 9) = &HAA55AB94
m_sBox(2, 9) = &H57489862
m_sBox(3, 9) = &H63E81440
m_sBox(0, 10) = &H55CA396A
m_sBox(1, 10) = &H2AAB10B6
m_sBox(2, 10) = &HB4CC5C34
m_sBox(3, 10) = &H1141E8CE
m_sBox(0, 11) = &HA15486AF
m_sBox(1, 11) = &H7C72E993
m_sBox(2, 11) = &HB3EE1411
m_sBox(3, 11) = &H636FBC2A
m_sBox(0, 12) = &H2BA9C55D
m_sBox(1, 12) = &H741831F6
m_sBox(2, 12) = &HCE5C3E16
m_sBox(3, 12) = &H9B87931E
m_sBox(0, 13) = &HAFD6BA33
m_sBox(1, 13) = &H6C24CF5C
m_sBox(2, 13) = &H7A325381
m_sBox(3, 13) = &H28958677
m_sBox(0, 14) = &H3B8F4898
m_sBox(1, 14) = &H6B4BB9AF
m_sBox(2, 14) = &HC4BFE81B
m_sBox(3, 14) = &H66282193
m_sBox(0, 15) = &H61D809CC
m_sBox(1, 15) = &HFB21A991
m_sBox(2, 15) = &H487CAC60
m_sBox(3, 15) = &H5DEC8032
m_sBox(0, 16) = &HEF845D5D
m_sBox(1, 16) = &HE98575B1
m_sBox(2, 16) = &HDC262302
m_sBox(3, 16) = &HEB651B88
m_sBox(0, 17) = &H23893E81
m_sBox(1, 17) = &HD396ACC5
m_sBox(2, 17) = &HF6D6FF3
m_sBox(3, 17) = &H83F44239
m_sBox(0, 18) = &H2E0B4482
m_sBox(1, 18) = &HA4842004
m_sBox(2, 18) = &H69C8F04A
m_sBox(3, 18) = &H9E1F9B5E
m_sBox(0, 19) = &H21C66842
m_sBox(1, 19) = &HF6E96C9A
m_sBox(2, 19) = &H670C9C61
m_sBox(3, 19) = &HABD388F0
m_sBox(0, 20) = &H6A51A0D2
m_sBox(1, 20) = &HD8542F68
m_sBox(2, 20) = &H960FA728
m_sBox(3, 20) = &HAB5133A3
m_sBox(0, 21) = &H6EEF0B6C
m_sBox(1, 21) = &H137A3BE4
m_sBox(2, 21) = &HBA3BF050
m_sBox(3, 21) = &H7EFB2A98
m_sBox(0, 22) = &HA1F1651D
m_sBox(1, 22) = &H39AF0176
m_sBox(2, 22) = &H66CA593E
m_sBox(3, 22) = &H82430E88
m_sBox(0, 23) = &H8CEE8619
m_sBox(1, 23) = &H456F9FB4
m_sBox(2, 23) = &H7D84A5C3
m_sBox(3, 23) = &H3B8B5EBE
m_sBox(0, 24) = &HE06F75D8
m_sBox(1, 24) = &H85C12073
m_sBox(2, 24) = &H401A449F
m_sBox(3, 24) = &H56C16AA6
m_sBox(0, 25) = &H4ED3AA62
m_sBox(1, 25) = &H363F7706
m_sBox(2, 25) = &H1BFEDF72
m_sBox(3, 25) = &H429B023D
m_sBox(0, 26) = &H37D0D724
m_sBox(1, 26) = &HD00A1248
m_sBox(2, 26) = &HDB0FEAD3
m_sBox(3, 26) = &H49F1C09B
m_sBox(0, 27) = &H75372C9
m_sBox(1, 27) = &H80991B7B
m_sBox(2, 27) = &H25D479D8
m_sBox(3, 27) = &HF6E8DEF7
m_sBox(0, 28) = &HE3FE501A
m_sBox(1, 28) = &HB6794C3B
m_sBox(2, 28) = &H976CE0BD
m_sBox(3, 28) = &H4C006BA
m_sBox(0, 29) = &HC1A94FB6
m_sBox(1, 29) = &H409F60C4
m_sBox(2, 29) = &H5E5C9EC2
m_sBox(3, 29) = &H196A2463
m_sBox(0, 30) = &H68FB6FAF
m_sBox(1, 30) = &H3E6C53B5
m_sBox(2, 30) = &H1339B2EB
m_sBox(3, 30) = &H3B52EC6F
m_sBox(0, 31) = &H6DFC511F
m_sBox(1, 31) = &H9B30952C
m_sBox(2, 31) = &HCC814544
m_sBox(3, 31) = &HAF5EBD09
m_sBox(0, 32) = &HBEE3D004
m_sBox(1, 32) = &HDE334AFD
m_sBox(2, 32) = &H660F2807
m_sBox(3, 32) = &H192E4BB3
m_sBox(0, 33) = &HC0CBA857
m_sBox(1, 33) = &H45C8740F
m_sBox(2, 33) = &HD20B5F39
m_sBox(3, 33) = &HB9D3FBDB
m_sBox(0, 34) = &H5579C0BD
m_sBox(1, 34) = &H1A60320A
m_sBox(2, 34) = &HD6A100C6
m_sBox(3, 34) = &H402C7279
m_sBox(0, 35) = &H679F25FE
m_sBox(1, 35) = &HFB1FA3CC
m_sBox(2, 35) = &H8EA5E9F8
m_sBox(3, 35) = &HDB3222F8
m_sBox(0, 36) = &H3C7516DF
m_sBox(1, 36) = &HFD616B15
m_sBox(2, 36) = &H2F501EC8
m_sBox(3, 36) = &HAD0552AB
m_sBox(0, 37) = &H323DB5FA
m_sBox(1, 37) = &HFD238760
m_sBox(2, 37) = &H53317B48
m_sBox(3, 37) = &H3E00DF82
m_sBox(0, 38) = &H9E5C57BB
m_sBox(1, 38) = &HCA6F8CA0
m_sBox(2, 38) = &H1A87562E
m_sBox(3, 38) = &HDF1769DB
m_sBox(0, 39) = &HD542A8F6
m_sBox(1, 39) = &H287EFFC3
m_sBox(2, 39) = &HAC6732C6
m_sBox(3, 39) = &H8C4F5573
m_sBox(0, 40) = &H695B27B0
m_sBox(1, 40) = &HBBCA58C8
m_sBox(2, 40) = &HE1FFA35D
m_sBox(3, 40) = &HB8F011A0
m_sBox(0, 41) = &H10FA3D98
m_sBox(1, 41) = &HFD2183B8
m_sBox(2, 41) = &H4AFCB56C
m_sBox(3, 41) = &H2DD1D35B
m_sBox(0, 42) = &H9A53E479
m_sBox(1, 42) = &HB6F84565
m_sBox(2, 42) = &HD28E49BC
m_sBox(3, 42) = &H4BFB9790
m_sBox(0, 43) = &HE1DDF2DA
m_sBox(1, 43) = &HA4CB7E33
m_sBox(2, 43) = &H62FB1341
m_sBox(3, 43) = &HCEE4C6E8
m_sBox(0, 44) = &HEF20CADA
m_sBox(1, 44) = &H36774C01
m_sBox(2, 44) = &HD07E9EFE
m_sBox(3, 44) = &H2BF11FB4
m_sBox(0, 45) = &H95DBDA4D
m_sBox(1, 45) = &HAE909198
m_sBox(2, 45) = &HEAAD8E71
m_sBox(3, 45) = &H6B93D5A0
m_sBox(0, 46) = &HD08ED1D0
m_sBox(1, 46) = &HAFC725E0
m_sBox(2, 46) = &H8E3C5B2F
m_sBox(3, 46) = &H8E7594B7
m_sBox(0, 47) = &H8FF6E2FB
m_sBox(1, 47) = &HF2122B64
m_sBox(2, 47) = &H8888B812
m_sBox(3, 47) = &H900DF01C
m_sBox(0, 48) = &H4FAD5EA0
m_sBox(1, 48) = &H688FC31C
m_sBox(2, 48) = &HD1CFF191
m_sBox(3, 48) = &HB3A8C1AD
m_sBox(0, 49) = &H2F2F2218
m_sBox(1, 49) = &HBE0E1777
m_sBox(2, 49) = &HEA752DFE
m_sBox(3, 49) = &H8B021FA1
m_sBox(0, 50) = &HE5A0CC0F
m_sBox(1, 50) = &HB56F74E8
m_sBox(2, 50) = &H18ACF3D6
m_sBox(3, 50) = &HCE89E299
m_sBox(0, 51) = &HB4A84FE0
m_sBox(1, 51) = &HFD13E0B7
m_sBox(2, 51) = &H7CC43B81
m_sBox(3, 51) = &HD2ADA8D9
m_sBox(0, 52) = &H165FA266
m_sBox(1, 52) = &H80957705
m_sBox(2, 52) = &H93CC7314
m_sBox(3, 52) = &H211A1477
m_sBox(0, 53) = &HE6AD2065
m_sBox(1, 53) = &H77B5FA86
m_sBox(2, 53) = &HC75442F5
m_sBox(3, 53) = &HFB9D35CF
m_sBox(0, 54) = &HEBCDAF0C
m_sBox(1, 54) = &H7B3E89A0
m_sBox(2, 54) = &HD6411BD3
m_sBox(3, 54) = &HAE1E7E49
m_sBox(0, 55) = &H250E2D
m_sBox(1, 55) = &H2071B35E
m_sBox(2, 55) = &H226800BB
m_sBox(3, 55) = &H57B8E0AF
m_sBox(0, 56) = &H2464369B
m_sBox(1, 56) = &HF009B91E
m_sBox(2, 56) = &H5563911D
m_sBox(3, 56) = &H59DFA6AA
m_sBox(0, 57) = &H78C14389
m_sBox(1, 57) = &HD95A537F
m_sBox(2, 57) = &H207D5BA2
m_sBox(3, 57) = &H2E5B9C5
m_sBox(0, 58) = &H83260376
m_sBox(1, 58) = &H6295CFA9
m_sBox(2, 58) = &H11C81968
m_sBox(3, 58) = &H4E734A41
m_sBox(0, 59) = &HB3472DCA
m_sBox(1, 59) = &H7B14A94A
m_sBox(2, 59) = &H1B510052
m_sBox(3, 59) = &H9A532915
m_sBox(0, 60) = &HD60F573F
m_sBox(1, 60) = &HBC9BC6E4
m_sBox(2, 60) = &H2B60A476
m_sBox(3, 60) = &H81E67400
m_sBox(0, 61) = &H8BA6FB5
m_sBox(1, 61) = &H571BE91F
m_sBox(2, 61) = &HF296EC6B
m_sBox(3, 61) = &H2A0DD915
m_sBox(0, 62) = &HB6636521
m_sBox(1, 62) = &HE7B9F9B6
m_sBox(2, 62) = &HFF34052E
m_sBox(3, 62) = &HC5855664
m_sBox(0, 63) = &H53B02D5D
m_sBox(1, 63) = &HA99F8FA1
m_sBox(2, 63) = &H8BA4799
m_sBox(3, 63) = &H6E85076A
m_sBox(0, 64) = &H4B7A70E9
m_sBox(1, 64) = &HB5B32944
m_sBox(2, 64) = &HDB75092E
m_sBox(3, 64) = &HC4192623
m_sBox(0, 65) = &HAD6EA6B0
m_sBox(1, 65) = &H49A7DF7D
m_sBox(2, 65) = &H9CEE60B8
m_sBox(3, 65) = &H8FEDB266
m_sBox(0, 66) = &HECAA8C71
m_sBox(1, 66) = &H699A17FF
m_sBox(2, 66) = &H5664526C
m_sBox(3, 66) = &HC2B19EE1
m_sBox(0, 67) = &H193602A5
m_sBox(1, 67) = &H75094C29
m_sBox(2, 67) = &HA0591340
m_sBox(3, 67) = &HE4183A3E
m_sBox(0, 68) = &H3F54989A
m_sBox(1, 68) = &H5B429D65
m_sBox(2, 68) = &H6B8FE4D6
m_sBox(3, 68) = &H99F73FD6
m_sBox(0, 69) = &HA1D29C07
m_sBox(1, 69) = &HEFE830F5
m_sBox(2, 69) = &H4D2D38E6
m_sBox(3, 69) = &HF0255DC1
m_sBox(0, 70) = &H4CDD2086
m_sBox(1, 70) = &H8470EB26
m_sBox(2, 70) = &H6382E9C6
m_sBox(3, 70) = &H21ECC5E
m_sBox(0, 71) = &H9686B3F
m_sBox(1, 71) = &H3EBAEFC9
m_sBox(2, 71) = &H3C971814
m_sBox(3, 71) = &H6B6A70A1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -