to yjhsou:你给我的AES.DLL怎么在VB里面调用啊?能给我个说明吗?

解决方案 »

  1.   

    Private Const BlockLength = 16              ' maximum block length in bytes
    Private Const BlockLengthMax = 32           ' maximum block length in bytes
    Private Const KeyLengthMax = 32             ' maximum block length in bytes
    Private Const KeyScheduleLengthMax = 64     ' maximum key schedule length in bytesPrivate Type EncCtx                         ' type to hold the AES encryption context data
      Ekey(0 To KeyScheduleLengthMax - 1) As Long
    End TypePrivate Type DecCtx                         ' type to hold the AES decryption context data
      Ekey(0 To KeyScheduleLengthMax - 1) As Long
    End TypePrivate Type Key                            ' type to hold user key data
     K(0 To KeyLengthMax - 1) As Byte
    End TypePrivate Type InOut                          ' type to hold cipher input and output blocks
     IO(0 To BlockLength - 1) As Byte
    End TypePrivate Type BigInOut                       ' type to hold cipher input and output blocks
     IO(0 To 128 * BlockLength - 1) As Byte
    End TypeRem Change "c:\temp\" in the following lines to the directory path where the AES DLL is located
    Private Declare Function AesEncryptKey128 Lib "c:\temp\aes.dll" _
            Alias "_aes_encrypt_key128@8" (K As Key, C As EncCtx) As Integer
    Private Declare Function AesEncryptKey192 Lib "c:\temp\aes.dll" _
            Alias "_aes_encrypt_key192@8" (K As Key, C As EncCtx) As Integer
    Private Declare Function AesEncryptKey256 Lib "c:\temp\aes.dll" _
            Alias "_aes_encrypt_key256@8" (K As Key, C As EncCtx) As Integer
    Private Declare Function AesEncryptKey Lib "c:\temp\aes.dll" _
            Alias "_aes_encrypt_key@12" (K As Key, ByVal N As Integer, C As EncCtx) As Integer
    Private Declare Function AesEncrypt Lib "c:\temp\aes.dll" _
            Alias "_aes_encrypt@12" (Ib As InOut, Ob As InOut, C As EncCtx) As Integer
    Private Declare Function AesDecryptKey128 Lib "c:\temp\aes.dll" _
            Alias "_aes_decrypt_key128@8" (K As Key, C As DecCtx) As Integer
    Private Declare Function AesDecryptKey192 Lib "c:\temp\aes.dll" _
            Alias "_aes_decrypt_key192@8" (K As Key, C As DecCtx) As Integer
    Private Declare Function AesDecryptKey256 Lib "c:\temp\aes.dll" _
            Alias "_aes_decrypt_key256@8" (K As Key, C As DecCtx) As Integer
    Private Declare Function AesDecryptKey Lib "c:\temp\aes.dll" _
            Alias "_aes_decrypt_key@12" (K As Key, ByVal N As Long, C As DecCtx) As Integer
    Private Declare Function AesDecrypt Lib "c:\temp\aes.dll" _
            Alias "_aes_decrypt@12" (Ib As InOut, Ob As InOut, C As DecCtx) As IntegerPrivate Declare Function AesModeReset Lib "c:\temp\aes.dll" Alias "_aes_mode_reset@4" _
            (C As EncCtx) As Integer
    Private Declare Function AesEcbEncrypt Lib "c:\temp\aes.dll" Alias "_aes_ecb_encrypt@16" _
            (Ib As BigInOut, Ob As BigInOut, ByVal N As Long, C As EncCtx) As Integer
    Private Declare Function AesEcbDecrypt Lib "c:\temp\aes.dll" Alias "_aes_ecb_decrypt@16" _
            (Ib As BigInOut, Ob As BigInOut, ByVal N As Long, C As DecCtx) As Integer
    Private Declare Function AesCbcEncrypt Lib "c:\temp\aes.dll" Alias "_aes_cbc_encrypt@20" _
            (Ib As BigInOut, Ob As BigInOut, ByVal N As Long, Iv As InOut, C As EncCtx) As Integer
    Private Declare Function AesCbcDecrypt Lib "c:\temp\aes.dll" Alias "_aes_cbc_decrypt@20" _
            (Ib As BigInOut, Ob As BigInOut, ByVal N As Long, Iv As InOut, C As DecCtx) As Integer
    Private Declare Function AesCfbEncrypt Lib "c:\temp\aes.dll" Alias "_aes_cfb_encrypt@20" _
            (Ib As BigInOut, Ob As BigInOut, ByVal N As Long, Iv As InOut, C As EncCtx) As Integer
    Private Declare Function AesCfbDecrypt Lib "c:\temp\aes.dll" Alias "_aes_cfb_decrypt@20" _
            (Ib As BigInOut, Ob As BigInOut, ByVal N As Long, Iv As InOut, C As EncCtx) As Integer
    Private Declare Function AesOfbCrypt Lib "c:\temp\aes.dll" Alias "_aes_ofb_crypt@20" _
            (Ib As BigInOut, Ob As BigInOut, ByVal N As Long, Iv As InOut, C As EncCtx) As Integer
    Private Declare Function AesCtrCrypt Lib "c:\temp\aes.dll" Alias "_aes_ctr_crypt@24" _
            (Ib As BigInOut, Ob As BigInOut, ByVal N As Long, Iv As InOut, ByVal CtrFn As Long, C As EncCtx) As IntegerPrivate Sub Hex(X As Byte)                  ' output a byte in hexadecimal format
    Dim H As Byte
    H = Int(X / 16)
    If H < 10 Then Debug.Print Chr(48 + H); Else Debug.Print Chr(87 + H);
    H = Int(X Mod 16)
    If H < 10 Then Debug.Print Chr(48 + H); Else Debug.Print Chr(87 + H);
    End SubPrivate Sub OutKey(S As String, B As Key, ByVal KeyL As Integer)   ' display a key value
    Debug.Print: Debug.Print S;
    For i = 0 To KeyL - 1
       Hex B.K(i)
    Next i
    End SubPrivate Sub OutBlock(S As String, B As InOut)   ' display an input/output block
    Debug.Print: Debug.Print S;
    For i = 0 To BlockLength - 1
       Hex B.IO(i)
    Next i
    End SubPrivate Sub OutBigBlock(S As String, B As BigInOut)   ' display an input/output block
    Debug.Print: Debug.Print S;
    For i = 0 To BlockLength - 1
       Hex B.IO(i)
    Next i
    Debug.Print " ... ";
    For i = 127 * BlockLength To 128 * BlockLength - 1
       Hex B.IO(i)
    Next i
    End SubPrivate Sub CtrInc(Ctr As InOut)
        Ctr.IO(0) = Ctr.IO(0) + 1
        If (Ctr.IO(0) = 0) Then
            Ctr.IO(1) = Ctr.IO(1) + 1
            If (Ctr.IO(1) = 0) Then
                Ctr.IO(2) = Ctr.IO(2) + 1
                If (Ctr.IO(3) = 0) Then
                    Ctr.IO(3) = Ctr.IO(3) + 1
                End If
            End If
        End If
    End SubRem The following Main routine should output the following in the immediate window:
    Rem Variable Key Length ( 16 )
    Rem Key =            00000000000000000000000000000000
    Rem Input =          00000000000000000000000000000000
    Rem Encrypted Text = 66e94bd4ef8a2c3b884cfa59ca342b2e
    Rem Decrypted Text = 00000000000000000000000000000000
    Rem Variable Key Length ( 24 )
    Rem Key =            000000000000000000000000000000000000000000000000
    Rem Input =          00000000000000000000000000000000
    Rem Encrypted Text = aae06992acbf52a3e8f4a96ec9300bd7
    Rem Decrypted Text = 00000000000000000000000000000000
    Rem Variable Key Length ( 32 )
    Rem Key =            0000000000000000000000000000000000000000000000000000000000000000
    Rem Input =          00000000000000000000000000000000
    Rem Encrypted Text = dc95c078a2408989ad48a21492842087
    Rem Decrypted Text = 00000000000000000000000000000000
    Rem Fixed Key Length ( 128 )
    Rem Key =            00000000000000000000000000000000
    Rem Input =          00000000000000000000000000000000
    Rem Encrypted Text = 66e94bd4ef8a2c3b884cfa59ca342b2e
    Rem Decrypted Text = 00000000000000000000000000000000
    Rem Fixed Key Length ( 192 )
    Rem Key =            000000000000000000000000000000000000000000000000
    Rem Input =          00000000000000000000000000000000
    Rem Encrypted Text = aae06992acbf52a3e8f4a96ec9300bd7
    Rem Decrypted Text = 00000000000000000000000000000000
    Rem Fixed Key Length ( 256 )
    Rem Key =            0000000000000000000000000000000000000000000000000000000000000000
    Rem Input =          00000000000000000000000000000000
    Rem Encrypted Text = dc95c078a2408989ad48a21492842087
    Rem Decrypted Text = 00000000000000000000000000000000
      

  2.   


    Sub Main()
    Dim Key As Key                                  ' all these variables are initialised
    Dim Ib As InOut, Ob As InOut, Rb As InOut       ' to zero by VBA
    Dim Iv1 As InOut, Iv2 As InOut
    Dim Ecx As EncCtx
    Dim Dcx As DecCtx
    Dim RetVal As IntegerFor KeyL = 16 To 32 Step 8
    Debug.Print "Variable Key Length ("; KeyL; ")";
    OutKey "Key =            ", Key, KeyL
    OutBlock "Input =          ", Ib
    RetVal = AesEncryptKey(Key, KeyL, Ecx)          ' set an all zero encryption key
    RetVal = AesEncrypt(Ib, Ob, Ecx)                ' encrypt Ib to Ob
    OutBlock "Encrypted Text = ", Ob
    RetVal = AesDecryptKey(Key, KeyL, Dcx)          ' set an all zero decryption key
    RetVal = AesDecrypt(Ob, Rb, Dcx)                ' decrypt Ob to Rb
    OutBlock "Decrypted Text = ", Rb
    Debug.Print
    Next KeyLDebug.Print
    KeyL = 128: Debug.Print "Fixed Key Length ("; KeyL; ")";
    OutKey "Key =            ", Key, 16
    OutBlock "Input =          ", Ib
    RetVal = AesEncryptKey128(Key, Ecx)             ' set an all zero encryption key
    RetVal = AesEncrypt(Ib, Ob, Ecx)                ' encrypt Ib to Ob
    OutBlock "Encrypted Text = ", Ob
    RetVal = AesDecryptKey128(Key, Dcx)             ' set an all zero decryption key
    RetVal = AesDecrypt(Ob, Rb, Dcx)                ' decrypt Ob to Rb
    OutBlock "Decrypted Text = ", Rb
    Debug.PrintDebug.Print
    KeyL = 192: Debug.Print "Fixed Key Length ("; KeyL; ")";
    OutKey "Key =            ", Key, 24
    OutBlock "Input =          ", Ib
    RetVal = AesEncryptKey192(Key, Ecx)             ' set an all zero encryption key
    RetVal = AesEncrypt(Ib, Ob, Ecx)                ' encrypt Ib to Ob
    OutBlock "Encrypted Text = ", Ob
    RetVal = AesDecryptKey192(Key, Dcx)             ' set an all zero decryption key
    RetVal = AesDecrypt(Ob, Rb, Dcx)                ' decrypt Ob to Rb
    OutBlock "Decrypted Text = ", Rb
    Debug.PrintDebug.Print
    KeyL = 256: Debug.Print "Fixed Key Length ("; KeyL; ")";
    OutKey "Key =            ", Key, 32
    OutBlock "Input =          ", Ib
    RetVal = AesEncryptKey256(Key, Ecx)             ' set an all zero encryption key
    RetVal = AesEncrypt(Ib, Ob, Ecx)                ' encrypt Ib to Ob
    OutBlock "Encrypted Text = ", Ob
    RetVal = AesDecryptKey256(Key, Dcx)             ' set an all zero decryption key
    RetVal = AesDecrypt(Ob, Rb, Dcx)                ' decrypt Ob to Rb
    OutBlock "Decrypted Text = ", Rb
    Debug.PrintDebug.Print
    KeyL = 128: Debug.Print "Fixed Key Length ("; KeyL; ")";
    OutKey "Key =            ", Key, 16
    OutBlock "Input =          ", Ib
    RetVal = AesEncryptKey128(Key, Ecx)             ' set an all zero encryption key
    OutBlock "Encrypted Text = ", Ob
    RetVal = AesDecryptKey128(Key, Dcx)             ' set an all zero decryption key
    OutBlock "Decrypted Text = ", Rb
    Debug.PrintDebug.Print
    KeyL = 128: Debug.Print "Fixed Key Length ("; KeyL; ")";
    OutKey "Key =            ", Key, 16
    RetVal = AesEncryptKey128(Key, Ecx)             ' set an all zero encryption key
    RetVal = AesDecryptKey128(Key, Dcx)             ' set an all zero decryption key
    Dim Pt1 As BigInOut, Pt2 As BigInOut, Ct As BigInOutFor i = 0 To 128 * BlockLength - 1
        Pt1.IO(i) = i Mod 256
    Next iOutBigBlock "ECB Input =      ", Pt1
    RetVal = AesEcbEncrypt(Pt1, Ct, 128 * BlockLength, Ecx)
    OutBigBlock "Encrypted Text = ", Ct
    RetVal = AesEcbDecrypt(Ct, Pt2, 128 * BlockLength, Dcx)
    OutBigBlock "Decrypted Text = ", Pt2
    Debug.PrintOutBigBlock "CBC Mode Input = ", Pt1
    RetVal = AesCbcEncrypt(Pt1, Ct, 128 * BlockLength, Iv1, Ecx)
    OutBigBlock "Encrypted Text = ", Ct
    RetVal = AesCbcDecrypt(Ct, Pt2, 128 * BlockLength, Iv2, Dcx)
    OutBigBlock "Decrypted Text = ", Pt2
    Debug.PrintOutBigBlock "CFB Mode Input = ", Pt1
    RetVal = AesCfbEncrypt(Pt1, Ct, 128 * BlockLength, Iv1, Ecx)
    OutBigBlock "Encrypted Text = ", Ct
    RetVal = AesCfbDecrypt(Ct, Pt2, 128 * BlockLength, Iv2, Ecx)
    OutBigBlock "Decrypted Text = ", Pt2
    Debug.PrintOutBigBlock "OFB Mode Input = ", Pt1
    RetVal = AesOfbCrypt(Pt1, Ct, 128 * BlockLength, Iv1, Ecx)
    OutBigBlock "Encrypted Text = ", Ct
    RetVal = AesOfbCrypt(Ct, Pt2, 128 * BlockLength, Iv2, Ecx)
    OutBigBlock "Decrypted Text = ", Pt2
    Debug.Print#If False Then
    Rem CTR Mode is not working because of a problem with the 'AddressOf' operator
    OutBigBlock "CTR Mode Input = ", Pt1
    RetVal = AesCtrCrypt(Pt1, Ct, 128 * BlockLength, Iv1, AddressOf CtrInc, Ecx)
    OutBigBlock "Encrypted Text = ", Ct
    RetVal = AesCtrCrypt(Ct, Pt2, 128 * BlockLength, Iv2, AddressOf CtrInc, Ecx)
    OutBigBlock "Decrypted Text = ", Pt2
    Debug.Print
    #End IfDebug.Print
    End Sub