rijndael.cls
来自「AES的加密类模块 可以把文件加密成AES密文」· CLS 代码 · 共 1,588 行 · 第 1/5 页
CLS
1,588 行
For i = 1 To Nr - 1 'Nr is number of rounds
CopyMemory s(0), t0, 4&
CopyMemory s(4), t1, 4&
CopyMemory s(8), t2, 4&
CopyMemory s(12), t3, 4&
CopyMemory s(16), t4, 4&
t0 = Td0(s(0)) Xor Td1(s(17)) Xor Td2(s(14)) Xor Td3(s(11)) Xor rkey(k + 0)
t1 = Td0(s(4)) Xor Td1(s(1)) Xor Td2(s(18)) Xor Td3(s(15)) Xor rkey(k + 1)
t2 = Td0(s(8)) Xor Td1(s(5)) Xor Td2(s(2)) Xor Td3(s(19)) Xor rkey(k + 2)
t3 = Td0(s(12)) Xor Td1(s(9)) Xor Td2(s(6)) Xor Td3(s(3)) Xor rkey(k + 3)
t4 = Td0(s(16)) Xor Td1(s(13)) Xor Td2(s(10)) Xor Td3(s(7)) Xor rkey(k + 4)
k = k + 5
Next i
'Final round
CopyMemory s(0), t0, 4&
CopyMemory s(4), t1, 4&
CopyMemory s(8), t2, 4&
CopyMemory s(12), t3, 4&
CopyMemory s(16), t4, 4&
t0 = (Td4(s(0)) And &HFF&) Xor (Td4(s(17)) And &HFF00&) Xor (Td4(s(14)) And &HFF0000) Xor (Td4(s(11)) And &HFF000000) Xor rkey(k + 0)
t1 = (Td4(s(4)) And &HFF&) Xor (Td4(s(1)) And &HFF00&) Xor (Td4(s(18)) And &HFF0000) Xor (Td4(s(15)) And &HFF000000) Xor rkey(k + 1)
t2 = (Td4(s(8)) And &HFF&) Xor (Td4(s(5)) And &HFF00&) Xor (Td4(s(2)) And &HFF0000) Xor (Td4(s(19)) And &HFF000000) Xor rkey(k + 2)
t3 = (Td4(s(12)) And &HFF&) Xor (Td4(s(9)) And &HFF00&) Xor (Td4(s(6)) And &HFF0000) Xor (Td4(s(3)) And &HFF000000) Xor rkey(k + 3)
t4 = (Td4(s(16)) And &HFF&) Xor (Td4(s(13)) And &HFF00&) Xor (Td4(s(10)) And &HFF0000) Xor (Td4(s(7)) And &HFF000000) Xor rkey(k + 4)
CopyMemory plaintext(p + 0), t0, 4&
CopyMemory plaintext(p + 4), t1, 4&
CopyMemory plaintext(p + 8), t2, 4&
CopyMemory plaintext(p + 12), t3, 4&
CopyMemory plaintext(p + 16), t4, 4&
End Sub
#End If
'Encrypt a 192 bit block. plaintext(p ... p+23) is input, ciphertext(q ... q+23) is output.
'plaintext and ciphertext can be the same array. Will crash if ciphertext(q ... q+23) is not allocated.
Public Sub Block192Encrypt(plaintext() As Byte, ciphertext() As Byte, p As Long, q As Long)
Dim i As Long
Dim k As Long
Dim t0 As Long
Dim t1 As Long
Dim t2 As Long
Dim t3 As Long
Dim t4 As Long
Dim t5 As Long
Dim s(23) As Byte
CopyMemory t0, plaintext(p + 0), 4&
CopyMemory t1, plaintext(p + 4), 4&
CopyMemory t2, plaintext(p + 8), 4&
CopyMemory t3, plaintext(p + 12), 4&
CopyMemory t4, plaintext(p + 16), 4&
CopyMemory t5, plaintext(p + 20), 4&
t0 = t0 Xor fkey(0)
t1 = t1 Xor fkey(1)
t2 = t2 Xor fkey(2)
t3 = t3 Xor fkey(3)
t4 = t4 Xor fkey(4)
t5 = t5 Xor fkey(5)
k = 6
For i = 1 To Nr - 1 'Nr is number of rounds
CopyMemory s(0), t0, 4&
CopyMemory s(4), t1, 4&
CopyMemory s(8), t2, 4&
CopyMemory s(12), t3, 4&
CopyMemory s(16), t4, 4&
CopyMemory s(20), t5, 4&
t0 = Te0(s(0)) Xor Te1(s(5)) Xor Te2(s(10)) Xor Te3(s(15)) Xor fkey(k + 0)
t1 = Te0(s(4)) Xor Te1(s(9)) Xor Te2(s(14)) Xor Te3(s(19)) Xor fkey(k + 1)
t2 = Te0(s(8)) Xor Te1(s(13)) Xor Te2(s(18)) Xor Te3(s(23)) Xor fkey(k + 2)
t3 = Te0(s(12)) Xor Te1(s(17)) Xor Te2(s(22)) Xor Te3(s(3)) Xor fkey(k + 3)
t4 = Te0(s(16)) Xor Te1(s(21)) Xor Te2(s(2)) Xor Te3(s(7)) Xor fkey(k + 4)
t5 = Te0(s(20)) Xor Te1(s(1)) Xor Te2(s(6)) Xor Te3(s(11)) Xor fkey(k + 5)
k = k + 6
Next i
'Final round
CopyMemory s(0), t0, 4&
CopyMemory s(4), t1, 4&
CopyMemory s(8), t2, 4&
CopyMemory s(12), t3, 4&
CopyMemory s(16), t4, 4&
CopyMemory s(20), t5, 4&
t0 = (Te4(s(0)) And &HFF&) Xor (Te4(s(5)) And &HFF00&) Xor (Te4(s(10)) And &HFF0000) Xor (Te4(s(15)) And &HFF000000) Xor fkey(k + 0)
t1 = (Te4(s(4)) And &HFF&) Xor (Te4(s(9)) And &HFF00&) Xor (Te4(s(14)) And &HFF0000) Xor (Te4(s(19)) And &HFF000000) Xor fkey(k + 1)
t2 = (Te4(s(8)) And &HFF&) Xor (Te4(s(13)) And &HFF00&) Xor (Te4(s(18)) And &HFF0000) Xor (Te4(s(23)) And &HFF000000) Xor fkey(k + 2)
t3 = (Te4(s(12)) And &HFF&) Xor (Te4(s(17)) And &HFF00&) Xor (Te4(s(22)) And &HFF0000) Xor (Te4(s(3)) And &HFF000000) Xor fkey(k + 3)
t4 = (Te4(s(16)) And &HFF&) Xor (Te4(s(21)) And &HFF00&) Xor (Te4(s(2)) And &HFF0000) Xor (Te4(s(7)) And &HFF000000) Xor fkey(k + 4)
t5 = (Te4(s(20)) And &HFF&) Xor (Te4(s(1)) And &HFF00&) Xor (Te4(s(6)) And &HFF0000) Xor (Te4(s(11)) And &HFF000000) Xor fkey(k + 5)
CopyMemory ciphertext(q + 0), t0, 4&
CopyMemory ciphertext(q + 4), t1, 4&
CopyMemory ciphertext(q + 8), t2, 4&
CopyMemory ciphertext(q + 12), t3, 4&
CopyMemory ciphertext(q + 16), t4, 4&
CopyMemory ciphertext(q + 20), t5, 4&
End Sub
'Decrypt a 192 bit block. ciphertext(q ... q+23) is input, plaintext(p ... p+23) is output.
'plaintext and ciphertext can be the same array. Will crash if plaintext(p ... p+23) is not allocated.
Public Sub Block192Decrypt(plaintext() As Byte, ciphertext() As Byte, p As Long, q As Long)
Dim i As Long
Dim k As Long
Dim t0 As Long
Dim t1 As Long
Dim t2 As Long
Dim t3 As Long
Dim t4 As Long
Dim t5 As Long
Dim s(23) As Byte
CopyMemory t0, ciphertext(q + 0), 4&
CopyMemory t1, ciphertext(q + 4), 4&
CopyMemory t2, ciphertext(q + 8), 4&
CopyMemory t3, ciphertext(q + 12), 4&
CopyMemory t4, ciphertext(q + 16), 4&
CopyMemory t5, ciphertext(q + 20), 4&
t0 = t0 Xor rkey(0)
t1 = t1 Xor rkey(1)
t2 = t2 Xor rkey(2)
t3 = t3 Xor rkey(3)
t4 = t4 Xor rkey(4)
t5 = t5 Xor rkey(5)
k = 6
For i = 1 To Nr - 1 'Nr is number of rounds
CopyMemory s(0), t0, 4&
CopyMemory s(4), t1, 4&
CopyMemory s(8), t2, 4&
CopyMemory s(12), t3, 4&
CopyMemory s(16), t4, 4&
CopyMemory s(20), t5, 4&
t0 = Td0(s(0)) Xor Td1(s(21)) Xor Td2(s(18)) Xor Td3(s(15)) Xor rkey(k + 0)
t1 = Td0(s(4)) Xor Td1(s(1)) Xor Td2(s(22)) Xor Td3(s(19)) Xor rkey(k + 1)
t2 = Td0(s(8)) Xor Td1(s(5)) Xor Td2(s(2)) Xor Td3(s(23)) Xor rkey(k + 2)
t3 = Td0(s(12)) Xor Td1(s(9)) Xor Td2(s(6)) Xor Td3(s(3)) Xor rkey(k + 3)
t4 = Td0(s(16)) Xor Td1(s(13)) Xor Td2(s(10)) Xor Td3(s(7)) Xor rkey(k + 4)
t5 = Td0(s(20)) Xor Td1(s(17)) Xor Td2(s(14)) Xor Td3(s(11)) Xor rkey(k + 5)
k = k + 6
Next i
'Final round
CopyMemory s(0), t0, 4&
CopyMemory s(4), t1, 4&
CopyMemory s(8), t2, 4&
CopyMemory s(12), t3, 4&
CopyMemory s(16), t4, 4&
CopyMemory s(20), t5, 4&
t0 = (Td4(s(0)) And &HFF&) Xor (Td4(s(21)) And &HFF00&) Xor (Td4(s(18)) And &HFF0000) Xor (Td4(s(15)) And &HFF000000) Xor rkey(k + 0)
t1 = (Td4(s(4)) And &HFF&) Xor (Td4(s(1)) And &HFF00&) Xor (Td4(s(22)) And &HFF0000) Xor (Td4(s(19)) And &HFF000000) Xor rkey(k + 1)
t2 = (Td4(s(8)) And &HFF&) Xor (Td4(s(5)) And &HFF00&) Xor (Td4(s(2)) And &HFF0000) Xor (Td4(s(23)) And &HFF000000) Xor rkey(k + 2)
t3 = (Td4(s(12)) And &HFF&) Xor (Td4(s(9)) And &HFF00&) Xor (Td4(s(6)) And &HFF0000) Xor (Td4(s(3)) And &HFF000000) Xor rkey(k + 3)
t4 = (Td4(s(16)) And &HFF&) Xor (Td4(s(13)) And &HFF00&) Xor (Td4(s(10)) And &HFF0000) Xor (Td4(s(7)) And &HFF000000) Xor rkey(k + 4)
t5 = (Td4(s(20)) And &HFF&) Xor (Td4(s(17)) And &HFF00&) Xor (Td4(s(14)) And &HFF0000) Xor (Td4(s(11)) And &HFF000000) Xor rkey(k + 5)
CopyMemory plaintext(p + 0), t0, 4&
CopyMemory plaintext(p + 4), t1, 4&
CopyMemory plaintext(p + 8), t2, 4&
CopyMemory plaintext(p + 12), t3, 4&
CopyMemory plaintext(p + 16), t4, 4&
CopyMemory plaintext(p + 20), t5, 4&
End Sub
#If SUPPORT_LEVEL = 2 Then
'Encrypt a 224 bit block. plaintext(p ... p+27) is input, ciphertext(q ... q+27) is output.
'plaintext and ciphertext can be the same array. Will crash if ciphertext(q ... q+27) is not allocated.
Public Sub Block224Encrypt(plaintext() As Byte, ciphertext() As Byte, p As Long, q As Long)
Dim i As Long
Dim k As Long
Dim t0 As Long
Dim t1 As Long
Dim t2 As Long
Dim t3 As Long
Dim t4 As Long
Dim t5 As Long
Dim t6 As Long
Dim s(27) As Byte
CopyMemory t0, plaintext(p + 0), 4&
CopyMemory t1, plaintext(p + 4), 4&
CopyMemory t2, plaintext(p + 8), 4&
CopyMemory t3, plaintext(p + 12), 4&
CopyMemory t4, plaintext(p + 16), 4&
CopyMemory t5, plaintext(p + 20), 4&
CopyMemory t6, plaintext(p + 24), 4&
t0 = t0 Xor fkey(0)
t1 = t1 Xor fkey(1)
t2 = t2 Xor fkey(2)
t3 = t3 Xor fkey(3)
t4 = t4 Xor fkey(4)
t5 = t5 Xor fkey(5)
t6 = t6 Xor fkey(6)
k = 7
For i = 1 To Nr - 1 'Nr is number of rounds
CopyMemory s(0), t0, 4&
CopyMemory s(4), t1, 4&
CopyMemory s(8), t2, 4&
CopyMemory s(12), t3, 4&
CopyMemory s(16), t4, 4&
CopyMemory s(20), t5, 4&
CopyMemory s(24), t6, 4&
t0 = Te0(s(0)) Xor Te1(s(5)) Xor Te2(s(10)) Xor Te3(s(19)) Xor fkey(k + 0)
t1 = Te0(s(4)) Xor Te1(s(9)) Xor Te2(s(14)) Xor Te3(s(23)) Xor fkey(k + 1)
t2 = Te0(s(8)) Xor Te1(s(13)) Xor Te2(s(18)) Xor Te3(s(27)) Xor fkey(k + 2)
t3 = Te0(s(12)) Xor Te1(s(17)) Xor Te2(s(22)) Xor Te3(s(3)) Xor fkey(k + 3)
t4 = Te0(s(16)) Xor Te1(s(21)) Xor Te2(s(26)) Xor Te3(s(7)) Xor fkey(k + 4)
t5 = Te0(s(20)) Xor Te1(s(25)) Xor Te2(s(2)) Xor Te3(s(11)) Xor fkey(k + 5)
t6 = Te0(s(24)) Xor Te1(s(1)) Xor Te2(s(6)) Xor Te3(s(15)) Xor fkey(k + 6)
k = k + 7
Next i
'Final round
CopyMemory s(0), t0, 4&
CopyMemory s(4), t1, 4&
CopyMemory s(8), t2, 4&
CopyMemory s(12), t3, 4&
CopyMemory s(16), t4, 4&
CopyMemory s(20), t5, 4&
CopyMemory s(24), t6, 4&
t0 = (Te4(s(0)) And &HFF&) Xor (Te4(s(5)) And &HFF00&) Xor (Te4(s(10)) And &HFF0000) Xor (Te4(s(19)) And &HFF000000) Xor fkey(k + 0)
t1 = (Te4(s(4)) And &HFF&) Xor (Te4(s(9)) And &HFF00&) Xor (Te4(s(14)) And &HFF0000) Xor (Te4(s(23)) And &HFF000000) Xor fkey(k + 1)
t2 = (Te4(s(8)) And &HFF&) Xor (Te4(s(13)) And &HFF00&) Xor (Te4(s(18)) And &HFF0000) Xor (Te4(s(27)) And &HFF000000) Xor fkey(k + 2)
t3 = (Te4(s(12)) And &HFF&) Xor (Te4(s(17)) And &HFF00&) Xor (Te4(s(22)) And &HFF0000) Xor (Te4(s(3)) And &HFF000000) Xor fkey(k + 3)
t4 = (Te4(s(16)) And &HFF&) Xor (Te4(s(21)) And &HFF00&) Xor (Te4(s(26)) And &HFF0000) Xor (Te4(s(7)) And &HFF000000) Xor fkey(k + 4)
t5 = (Te4(s(20)) And &HFF&) Xor (Te4(s(25)) And &HFF00&) Xor (Te4(s(2)) And &HFF0000) Xor (Te4(s(11)) And &HFF000000) Xor fkey(k + 5)
t6 = (Te4(s(24)) And &HFF&) Xor (Te4(s(1)) And &HFF00&) Xor (Te4(s(6)) And &HFF0000) Xor (Te4(s(15)) And &HFF000000) Xor fkey(k + 6)
CopyMemory ciphertext(q + 0), t0, 4&
CopyMemory ciphertext(q + 4), t1, 4&
CopyMemory ciphertext(q + 8), t2, 4&
CopyMemory ciphertext(q + 12), t3, 4&
CopyMemory ciphertext(q + 16), t4, 4&
CopyMemory ciphertext(q + 20), t5, 4&
CopyMemory ciphertext(q + 24), t6, 4&
End Sub
'Decrypt a 224 bit block. ciphertext(q ... q+27) is input, plaintext(p ... p+27) is output.
'plaintext and ciphertext can be the same array. Will crash if plaintext(p ... p+27) is not allocated.
Public Sub Block224Decrypt(plaintext() As Byte, ciphertext() As Byte, p As Long, q As Long)
Dim i As Long
Dim k As Long
Dim t0 As Long
Dim t1 As Long
Dim t2 As Long
Dim t3 As Long
Dim t4 As Long
Dim t5 As Long
Dim t6 As Long
Dim s(27) As Byte
CopyMemory t0, ciphertext(q + 0), 4&
CopyMemory t1, ciphertext(q + 4), 4&
CopyMemory t2, ciphertext(q + 8), 4&
CopyMemory t3, ciphertext(q + 12), 4&
CopyMemory t4, ciphertext(q + 16), 4&
CopyMemory t5, ciphertext(q + 20), 4&
CopyMemory t6, ciphertext(q + 24), 4&
t0 = t0 Xor rkey(0)
t1 = t1 Xor rkey(1)
t2 = t2 Xor rkey(2)
t3 = t3 Xor rkey(3)
t4 = t4 Xor rkey(4)
t5 = t5 Xor rkey(5)
t6 = t6 Xor rkey(6)
k = 7
For i = 1 To Nr - 1 'Nr is number of rounds
CopyMemory s(0), t0, 4&
CopyMemory s(4), t1, 4&
CopyMemory s(8), t2, 4&
CopyMemory s(12), t3, 4&
CopyMemory s(16), t4, 4&
CopyMemory s(20), t5, 4&
CopyMemory s(24), t6, 4&
t0 = Td0(s(0)) Xor Td1(s(25)) Xor Td2(s(22)) Xor Td3(s(15)) Xor rkey(k + 0)
t1 = Td0(s(4)) Xor Td1(s(1)) Xor Td2(s(26)) Xor Td3(s(19)) Xor rkey(k + 1)
t2 = Td0(s(8)) Xor Td1(s(5)) Xor Td2(s(2)) Xor Td3(s(23)) Xor rkey(k + 2)
t3 = Td0(s(12)) Xor Td1(s(9)) Xor Td2(s(6)) Xor Td3(s(27)) Xor rkey(k + 3)
t4 = Td0(s(16)) Xor Td1(s(13)) Xor Td2(s(10)) Xor Td3(s(3)) Xor rkey(k + 4)
t5 = Td0(s(20)) Xor Td1(s(17)) Xor Td2(s(14)) Xor Td3(s(7)) Xor rkey(k + 5)
t6 = Td0(s(24)) Xor Td1(s(21)) Xor Td2(s(18)) Xor Td3(s(11)) Xor rkey(k + 6)
k = k + 7
Next i
'Final round
CopyMemory s(0), t0, 4&
CopyMemory s(4), t1, 4&
CopyMemory s(8), t2, 4&
CopyMemory s(12), t3, 4&
CopyMemory s(16), t4, 4&
CopyMemory s(20), t5, 4&
CopyMemory s(24), t6, 4&
t0 = (Td4(s(0)) And &HFF&) Xor (Td4(s(25)) And &HFF00&) Xor (Td4(s(22)) And &HFF0000) Xor (Td4(s(15)) And &HFF000000) Xor rkey(k + 0)
t1 = (Td4(s(4)) And &HFF&) Xor (Td4(s(1)) And &HFF00&) Xor (Td4(s(26)) And &HFF0000) Xor (Td4(s(19)) And &HFF000000) Xor rkey(k + 1)
t2 = (Td4(s(8)) And &HFF&) Xor (Td4(s(5)) And &HFF00&) Xor (Td4(s(2)) And &HFF0000) Xor (Td4(s(23)) And &HFF000000) Xor rkey(k + 2)
t3 = (Td4(s(12)) And &HFF&) Xor (Td4(s(9)) And &HFF00&) Xor (Td4(s(6)) And &HFF0000) Xor (Td4(s(27)) And &HFF000000) Xor rkey(k + 3)
t4 = (Td4(s(16)) And &HFF&) Xor (Td4(s(13)) And &HFF00&) Xor (Td4(s(10)) And &HFF0000) Xor (Td4(s(3)) And &HFF000000) Xor rkey(k + 4)
t5 = (Td4(s(20)) And &HFF&) Xor (Td4(s(17)) And &HFF00&) Xor (Td4(s(14)) And &HFF0000) Xor (Td4(s(7)) And &HFF000000) Xor rkey(k + 5)
t6 = (Td4(s(24)) And &HFF&) Xor (Td4(s(21)) And &HFF00&) Xor (Td4(s(18)) And &HFF0000) Xor (Td4(s(11)) And &HFF000000) Xor rkey(k + 6)
CopyMemory plaintext(p + 0), t0, 4&
CopyMemory plaintext(p + 4), t1, 4&
CopyMemory plaintext(p + 8), t2, 4&
CopyMemory plaintext(p + 12), t3, 4&
CopyMemory plaintext(p + 16), t4, 4&
CopyMemory plaintext(p + 20), t5, 4&
CopyMemory plaintext(p + 24), t6, 4&
End Sub
#End If
'Encrypt a 256 bit block. plaintext(p ... p+31) is input, ciphertext(q ... q+31) is output.
'plaintext and ciphertext can be the same array. Will crash if ciphertext(q ... q+31) is not allocated.
Public Sub Block256Encrypt(plaintext() As Byte, ciphertext() As Byte, p As Long, q As Long)
Dim i As Long
Dim k As Long
Dim t0 As Long
Dim t1 As Long
Dim t2 As Long
Dim t3 As Long
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?