By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
440,581 Members | 2,023 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 440,581 IT Pros & Developers. It's quick & easy.

AES Question - VBA/Excel

P: 2
>Moved from home > topics > microsoft access / vba > insights > aes encryption algorithm for vba and vbscript


Hi I have been trying out this code converted to encrypt strings from cells in a spreadsheet, however I find certain strings don't encrypt correctly. Removing null characters helped some, but other strings don't seem to encrypt correctly.

Expand|Select|Wrap|Line Numbers
  1. Function keyScheduleCore(ByRef row(), ByVal a, ByRef box() As Variant, ByRef rcon() As Variant)
  2.     Dim result(4), i
  3.  
  4.     For i = 0 To 3
  5.         result(i) = box(row((i + 5) Mod 4))
  6.     Next
  7.  
  8.     result(0) = result(0) Xor rcon(a)
  9.     keyScheduleCore = result
  10. End Function
  11. Function expandKey(ByRef key() As Double, ByRef box() As Variant, ByRef rcon() As Variant)
  12.     'MOD added () to array variables
  13.     Dim rConIter, temp(), i, result(240)
  14.  
  15.     ReDim temp(4)
  16.     rConIter = 1
  17.  
  18.     For i = 0 To 31
  19.         result(i) = key(i)
  20.     Next
  21.  
  22.     For i = 32 To 239 Step 4
  23.         temp(0) = result(i - 4)
  24.         temp(1) = result(i - 3)
  25.         temp(2) = result(i - 2)
  26.         temp(3) = result(i - 1)
  27.  
  28.         If i Mod 32 = 0 Then
  29.             temp = keyScheduleCore(temp, rConIter, box, rcon)
  30.             rConIter = rConIter + 1
  31.         End If
  32.  
  33.         If i Mod 32 = 16 Then
  34.             temp(0) = box(temp(0))
  35.             temp(1) = box(temp(1))
  36.             temp(2) = box(temp(2))
  37.             temp(3) = box(temp(3))
  38.         End If
  39.  
  40.         result(i) = result(i - 32) Xor temp(0)
  41.         result(i + 1) = result(i - 31) Xor temp(1)
  42.         result(i + 2) = result(i - 30) Xor temp(2)
  43.         result(i + 3) = result(i - 29) Xor temp(3)
  44.     Next
  45.  
  46.     expandKey = result
  47. End Function
  48.  
  49. Function stringAES(sPlain As String, sPass As String, Optional sNonce As String)
  50. ''
  51. ''Based on code by Rabbit
  52. 'http://bytes.com/topic/access/insights/906850-aes-encryption-algorithm-vba-vbscript
  53. 'See the ECM version for the changes
  54.     Dim sbox() As Variant, sboxinv() As Variant, rcon() As Variant
  55.     Dim g2() As Variant, g3() As Variant, g9() As Variant, g11() As Variant, g13() As Variant, g14() As Variant
  56.  
  57.     g2 = Array( _
  58.         &H0, &H2, &H4, &H6, &H8, &HA, &HC, &HE, &H10, &H12, &H14, &H16, &H18, &H1A, &H1C, &H1E, _
  59.         &H20, &H22, &H24, &H26, &H28, &H2A, &H2C, &H2E, &H30, &H32, &H34, &H36, &H38, &H3A, &H3C, &H3E, _
  60.         &H40, &H42, &H44, &H46, &H48, &H4A, &H4C, &H4E, &H50, &H52, &H54, &H56, &H58, &H5A, &H5C, &H5E, _
  61.         &H60, &H62, &H64, &H66, &H68, &H6A, &H6C, &H6E, &H70, &H72, &H74, &H76, &H78, &H7A, &H7C, &H7E, _
  62.         &H80, &H82, &H84, &H86, &H88, &H8A, &H8C, &H8E, &H90, &H92, &H94, &H96, &H98, &H9A, &H9C, &H9E, _
  63.         &HA0, &HA2, &HA4, &HA6, &HA8, &HAA, &HAC, &HAE, &HB0, &HB2, &HB4, &HB6, &HB8, &HBA, &HBC, &HBE, _
  64.         &HC0, &HC2, &HC4, &HC6, &HC8, &HCA, &HCC, &HCE, &HD0, &HD2, &HD4, &HD6, &HD8, &HDA, &HDC, &HDE, _
  65.         &HE0, &HE2, &HE4, &HE6, &HE8, &HEA, &HEC, &HEE, &HF0, &HF2, &HF4, &HF6, &HF8, &HFA, &HFC, &HFE, _
  66.         &H1B, &H19, &H1F, &H1D, &H13, &H11, &H17, &H15, &HB, &H9, &HF, &HD, &H3, &H1, &H7, &H5, _
  67.         &H3B, &H39, &H3F, &H3D, &H33, &H31, &H37, &H35, &H2B, &H29, &H2F, &H2D, &H23, &H21, &H27, &H25, _
  68.         &H5B, &H59, &H5F, &H5D, &H53, &H51, &H57, &H55, &H4B, &H49, &H4F, &H4D, &H43, &H41, &H47, &H45, _
  69.         &H7B, &H79, &H7F, &H7D, &H73, &H71, &H77, &H75, &H6B, &H69, &H6F, &H6D, &H63, &H61, &H67, &H65, _
  70.         &H9B, &H99, &H9F, &H9D, &H93, &H91, &H97, &H95, &H8B, &H89, &H8F, &H8D, &H83, &H81, &H87, &H85, _
  71.         &HBB, &HB9, &HBF, &HBD, &HB3, &HB1, &HB7, &HB5, &HAB, &HA9, &HAF, &HAD, &HA3, &HA1, &HA7, &HA5, _
  72.         &HDB, &HD9, &HDF, &HDD, &HD3, &HD1, &HD7, &HD5, &HCB, &HC9, &HCF, &HCD, &HC3, &HC1, &HC7, &HC5, _
  73.         &HFB, &HF9, &HFF, &HFD, &HF3, &HF1, &HF7, &HF5, &HEB, &HE9, &HEF, &HED, &HE3, &HE1, &HE7, &HE5)
  74.  
  75.     g3 = Array( _
  76.         &H0, &H3, &H6, &H5, &HC, &HF, &HA, &H9, &H18, &H1B, &H1E, &H1D, &H14, &H17, &H12, &H11, _
  77.         &H30, &H33, &H36, &H35, &H3C, &H3F, &H3A, &H39, &H28, &H2B, &H2E, &H2D, &H24, &H27, &H22, &H21, _
  78.         &H60, &H63, &H66, &H65, &H6C, &H6F, &H6A, &H69, &H78, &H7B, &H7E, &H7D, &H74, &H77, &H72, &H71, _
  79.         &H50, &H53, &H56, &H55, &H5C, &H5F, &H5A, &H59, &H48, &H4B, &H4E, &H4D, &H44, &H47, &H42, &H41, _
  80.         &HC0, &HC3, &HC6, &HC5, &HCC, &HCF, &HCA, &HC9, &HD8, &HDB, &HDE, &HDD, &HD4, &HD7, &HD2, &HD1, _
  81.         &HF0, &HF3, &HF6, &HF5, &HFC, &HFF, &HFA, &HF9, &HE8, &HEB, &HEE, &HED, &HE4, &HE7, &HE2, &HE1, _
  82.         &HA0, &HA3, &HA6, &HA5, &HAC, &HAF, &HAA, &HA9, &HB8, &HBB, &HBE, &HBD, &HB4, &HB7, &HB2, &HB1, _
  83.         &H90, &H93, &H96, &H95, &H9C, &H9F, &H9A, &H99, &H88, &H8B, &H8E, &H8D, &H84, &H87, &H82, &H81, _
  84.         &H9B, &H98, &H9D, &H9E, &H97, &H94, &H91, &H92, &H83, &H80, &H85, &H86, &H8F, &H8C, &H89, &H8A, _
  85.         &HAB, &HA8, &HAD, &HAE, &HA7, &HA4, &HA1, &HA2, &HB3, &HB0, &HB5, &HB6, &HBF, &HBC, &HB9, &HBA, _
  86.         &HFB, &HF8, &HFD, &HFE, &HF7, &HF4, &HF1, &HF2, &HE3, &HE0, &HE5, &HE6, &HEF, &HEC, &HE9, &HEA, _
  87.         &HCB, &HC8, &HCD, &HCE, &HC7, &HC4, &HC1, &HC2, &HD3, &HD0, &HD5, &HD6, &HDF, &HDC, &HD9, &HDA, _
  88.         &H5B, &H58, &H5D, &H5E, &H57, &H54, &H51, &H52, &H43, &H40, &H45, &H46, &H4F, &H4C, &H49, &H4A, _
  89.         &H6B, &H68, &H6D, &H6E, &H67, &H64, &H61, &H62, &H73, &H70, &H75, &H76, &H7F, &H7C, &H79, &H7A, _
  90.         &H3B, &H38, &H3D, &H3E, &H37, &H34, &H31, &H32, &H23, &H20, &H25, &H26, &H2F, &H2C, &H29, &H2A, _
  91.         &HB, &H8, &HD, &HE, &H7, &H4, &H1, &H2, &H13, &H10, &H15, &H16, &H1F, &H1C, &H19, &H1A)
  92.  
  93.     g9 = Array( _
  94.         &H0, &H9, &H12, &H1B, &H24, &H2D, &H36, &H3F, &H48, &H41, &H5A, &H53, &H6C, &H65, &H7E, &H77, _
  95.         &H90, &H99, &H82, &H8B, &HB4, &HBD, &HA6, &HAF, &HD8, &HD1, &HCA, &HC3, &HFC, &HF5, &HEE, &HE7, _
  96.         &H3B, &H32, &H29, &H20, &H1F, &H16, &HD, &H4, &H73, &H7A, &H61, &H68, &H57, &H5E, &H45, &H4C, _
  97.         &HAB, &HA2, &HB9, &HB0, &H8F, &H86, &H9D, &H94, &HE3, &HEA, &HF1, &HF8, &HC7, &HCE, &HD5, &HDC, _
  98.         &H76, &H7F, &H64, &H6D, &H52, &H5B, &H40, &H49, &H3E, &H37, &H2C, &H25, &H1A, &H13, &H8, &H1, _
  99.         &HE6, &HEF, &HF4, &HFD, &HC2, &HCB, &HD0, &HD9, &HAE, &HA7, &HBC, &HB5, &H8A, &H83, &H98, &H91, _
  100.         &H4D, &H44, &H5F, &H56, &H69, &H60, &H7B, &H72, &H5, &HC, &H17, &H1E, &H21, &H28, &H33, &H3A, _
  101.         &HDD, &HD4, &HCF, &HC6, &HF9, &HF0, &HEB, &HE2, &H95, &H9C, &H87, &H8E, &HB1, &HB8, &HA3, &HAA, _
  102.         &HEC, &HE5, &HFE, &HF7, &HC8, &HC1, &HDA, &HD3, &HA4, &HAD, &HB6, &HBF, &H80, &H89, &H92, &H9B, _
  103.         &H7C, &H75, &H6E, &H67, &H58, &H51, &H4A, &H43, &H34, &H3D, &H26, &H2F, &H10, &H19, &H2, &HB, _
  104.         &HD7, &HDE, &HC5, &HCC, &HF3, &HFA, &HE1, &HE8, &H9F, &H96, &H8D, &H84, &HBB, &HB2, &HA9, &HA0, _
  105.         &H47, &H4E, &H55, &H5C, &H63, &H6A, &H71, &H78, &HF, &H6, &H1D, &H14, &H2B, &H22, &H39, &H30, _
  106.         &H9A, &H93, &H88, &H81, &HBE, &HB7, &HAC, &HA5, &HD2, &HDB, &HC0, &HC9, &HF6, &HFF, &HE4, &HED, _
  107.         &HA, &H3, &H18, &H11, &H2E, &H27, &H3C, &H35, &H42, &H4B, &H50, &H59, &H66, &H6F, &H74, &H7D, _
  108.         &HA1, &HA8, &HB3, &HBA, &H85, &H8C, &H97, &H9E, &HE9, &HE0, &HFB, &HF2, &HCD, &HC4, &HDF, &HD6, _
  109.         &H31, &H38, &H23, &H2A, &H15, &H1C, &H7, &HE, &H79, &H70, &H6B, &H62, &H5D, &H54, &H4F, &H46)
  110.  
  111.     g11 = Array( _
  112.         &H0, &HB, &H16, &H1D, &H2C, &H27, &H3A, &H31, &H58, &H53, &H4E, &H45, &H74, &H7F, &H62, &H69, _
  113.         &HB0, &HBB, &HA6, &HAD, &H9C, &H97, &H8A, &H81, &HE8, &HE3, &HFE, &HF5, &HC4, &HCF, &HD2, &HD9, _
  114.         &H7B, &H70, &H6D, &H66, &H57, &H5C, &H41, &H4A, &H23, &H28, &H35, &H3E, &HF, &H4, &H19, &H12, _
  115.         &HCB, &HC0, &HDD, &HD6, &HE7, &HEC, &HF1, &HFA, &H93, &H98, &H85, &H8E, &HBF, &HB4, &HA9, &HA2, _
  116.         &HF6, &HFD, &HE0, &HEB, &HDA, &HD1, &HCC, &HC7, &HAE, &HA5, &HB8, &HB3, &H82, &H89, &H94, &H9F, _
  117.         &H46, &H4D, &H50, &H5B, &H6A, &H61, &H7C, &H77, &H1E, &H15, &H8, &H3, &H32, &H39, &H24, &H2F, _
  118.         &H8D, &H86, &H9B, &H90, &HA1, &HAA, &HB7, &HBC, &HD5, &HDE, &HC3, &HC8, &HF9, &HF2, &HEF, &HE4, _
  119.         &H3D, &H36, &H2B, &H20, &H11, &H1A, &H7, &HC, &H65, &H6E, &H73, &H78, &H49, &H42, &H5F, &H54, _
  120.         &HF7, &HFC, &HE1, &HEA, &HDB, &HD0, &HCD, &HC6, &HAF, &HA4, &HB9, &HB2, &H83, &H88, &H95, &H9E, _
  121.         &H47, &H4C, &H51, &H5A, &H6B, &H60, &H7D, &H76, &H1F, &H14, &H9, &H2, &H33, &H38, &H25, &H2E, _
  122.         &H8C, &H87, &H9A, &H91, &HA0, &HAB, &HB6, &HBD, &HD4, &HDF, &HC2, &HC9, &HF8, &HF3, &HEE, &HE5, _
  123.         &H3C, &H37, &H2A, &H21, &H10, &H1B, &H6, &HD, &H64, &H6F, &H72, &H79, &H48, &H43, &H5E, &H55, _
  124.         &H1, &HA, &H17, &H1C, &H2D, &H26, &H3B, &H30, &H59, &H52, &H4F, &H44, &H75, &H7E, &H63, &H68, _
  125.         &HB1, &HBA, &HA7, &HAC, &H9D, &H96, &H8B, &H80, &HE9, &HE2, &HFF, &HF4, &HC5, &HCE, &HD3, &HD8, _
  126.         &H7A, &H71, &H6C, &H67, &H56, &H5D, &H40, &H4B, &H22, &H29, &H34, &H3F, &HE, &H5, &H18, &H13, _
  127.         &HCA, &HC1, &HDC, &HD7, &HE6, &HED, &HF0, &HFB, &H92, &H99, &H84, &H8F, &HBE, &HB5, &HA8, &HA3)
  128.  
  129.     g13 = Array( _
  130.         &H0, &HD, &H1A, &H17, &H34, &H39, &H2E, &H23, &H68, &H65, &H72, &H7F, &H5C, &H51, &H46, &H4B, _
  131.         &HD0, &HDD, &HCA, &HC7, &HE4, &HE9, &HFE, &HF3, &HB8, &HB5, &HA2, &HAF, &H8C, &H81, &H96, &H9B, _
  132.         &HBB, &HB6, &HA1, &HAC, &H8F, &H82, &H95, &H98, &HD3, &HDE, &HC9, &HC4, &HE7, &HEA, &HFD, &HF0, _
  133.         &H6B, &H66, &H71, &H7C, &H5F, &H52, &H45, &H48, &H3, &HE, &H19, &H14, &H37, &H3A, &H2D, &H20, _
  134.         &H6D, &H60, &H77, &H7A, &H59, &H54, &H43, &H4E, &H5, &H8, &H1F, &H12, &H31, &H3C, &H2B, &H26, _
  135.         &HBD, &HB0, &HA7, &HAA, &H89, &H84, &H93, &H9E, &HD5, &HD8, &HCF, &HC2, &HE1, &HEC, &HFB, &HF6, _
  136.         &HD6, &HDB, &HCC, &HC1, &HE2, &HEF, &HF8, &HF5, &HBE, &HB3, &HA4, &HA9, &H8A, &H87, &H90, &H9D, _
  137.         &H6, &HB, &H1C, &H11, &H32, &H3F, &H28, &H25, &H6E, &H63, &H74, &H79, &H5A, &H57, &H40, &H4D, _
  138.         &HDA, &HD7, &HC0, &HCD, &HEE, &HE3, &HF4, &HF9, &HB2, &HBF, &HA8, &HA5, &H86, &H8B, &H9C, &H91, _
  139.         &HA, &H7, &H10, &H1D, &H3E, &H33, &H24, &H29, &H62, &H6F, &H78, &H75, &H56, &H5B, &H4C, &H41, _
  140.         &H61, &H6C, &H7B, &H76, &H55, &H58, &H4F, &H42, &H9, &H4, &H13, &H1E, &H3D, &H30, &H27, &H2A, _
  141.         &HB1, &HBC, &HAB, &HA6, &H85, &H88, &H9F, &H92, &HD9, &HD4, &HC3, &HCE, &HED, &HE0, &HF7, &HFA, _
  142.         &HB7, &HBA, &HAD, &HA0, &H83, &H8E, &H99, &H94, &HDF, &HD2, &HC5, &HC8, &HEB, &HE6, &HF1, &HFC, _
  143.         &H67, &H6A, &H7D, &H70, &H53, &H5E, &H49, &H44, &HF, &H2, &H15, &H18, &H3B, &H36, &H21, &H2C, _
  144.         &HC, &H1, &H16, &H1B, &H38, &H35, &H22, &H2F, &H64, &H69, &H7E, &H73, &H50, &H5D, &H4A, &H47, _
  145.         &HDC, &HD1, &HC6, &HCB, &HE8, &HE5, &HF2, &HFF, &HB4, &HB9, &HAE, &HA3, &H80, &H8D, &H9A, &H97)
  146.  
  147.     g14 = Array( _
  148.         &H0, &HE, &H1C, &H12, &H38, &H36, &H24, &H2A, &H70, &H7E, &H6C, &H62, &H48, &H46, &H54, &H5A, _
  149.         &HE0, &HEE, &HFC, &HF2, &HD8, &HD6, &HC4, &HCA, &H90, &H9E, &H8C, &H82, &HA8, &HA6, &HB4, &HBA, _
  150.         &HDB, &HD5, &HC7, &HC9, &HE3, &HED, &HFF, &HF1, &HAB, &HA5, &HB7, &HB9, &H93, &H9D, &H8F, &H81, _
  151.         &H3B, &H35, &H27, &H29, &H3, &HD, &H1F, &H11, &H4B, &H45, &H57, &H59, &H73, &H7D, &H6F, &H61, _
  152.         &HAD, &HA3, &HB1, &HBF, &H95, &H9B, &H89, &H87, &HDD, &HD3, &HC1, &HCF, &HE5, &HEB, &HF9, &HF7, _
  153.         &H4D, &H43, &H51, &H5F, &H75, &H7B, &H69, &H67, &H3D, &H33, &H21, &H2F, &H5, &HB, &H19, &H17, _
  154.         &H76, &H78, &H6A, &H64, &H4E, &H40, &H52, &H5C, &H6, &H8, &H1A, &H14, &H3E, &H30, &H22, &H2C, _
  155.         &H96, &H98, &H8A, &H84, &HAE, &HA0, &HB2, &HBC, &HE6, &HE8, &HFA, &HF4, &HDE, &HD0, &HC2, &HCC, _
  156.         &H41, &H4F, &H5D, &H53, &H79, &H77, &H65, &H6B, &H31, &H3F, &H2D, &H23, &H9, &H7, &H15, &H1B, _
  157.         &HA1, &HAF, &HBD, &HB3, &H99, &H97, &H85, &H8B, &HD1, &HDF, &HCD, &HC3, &HE9, &HE7, &HF5, &HFB, _
  158.         &H9A, &H94, &H86, &H88, &HA2, &HAC, &HBE, &HB0, &HEA, &HE4, &HF6, &HF8, &HD2, &HDC, &HCE, &HC0, _
  159.         &H7A, &H74, &H66, &H68, &H42, &H4C, &H5E, &H50, &HA, &H4, &H16, &H18, &H32, &H3C, &H2E, &H20, _
  160.         &HEC, &HE2, &HF0, &HFE, &HD4, &HDA, &HC8, &HC6, &H9C, &H92, &H80, &H8E, &HA4, &HAA, &HB8, &HB6, _
  161.         &HC, &H2, &H10, &H1E, &H34, &H3A, &H28, &H26, &H7C, &H72, &H60, &H6E, &H44, &H4A, &H58, &H56, _
  162.         &H37, &H39, &H2B, &H25, &HF, &H1, &H13, &H1D, &H47, &H49, &H5B, &H55, &H7F, &H71, &H63, &H6D, _
  163.         &HD7, &HD9, &HCB, &HC5, &HEF, &HE1, &HF3, &HFD, &HA7, &HA9, &HBB, &HB5, &H9F, &H91, &H83, &H8D)
  164.  
  165.     sbox = Array( _
  166.         &H63, &H7C, &H77, &H7B, &HF2, &H6B, &H6F, &HC5, &H30, &H1, &H67, &H2B, &HFE, &HD7, &HAB, &H76, _
  167.         &HCA, &H82, &HC9, &H7D, &HFA, &H59, &H47, &HF0, &HAD, &HD4, &HA2, &HAF, &H9C, &HA4, &H72, &HC0, _
  168.         &HB7, &HFD, &H93, &H26, &H36, &H3F, &HF7, &HCC, &H34, &HA5, &HE5, &HF1, &H71, &HD8, &H31, &H15, _
  169.         &H4, &HC7, &H23, &HC3, &H18, &H96, &H5, &H9A, &H7, &H12, &H80, &HE2, &HEB, &H27, &HB2, &H75, _
  170.         &H9, &H83, &H2C, &H1A, &H1B, &H6E, &H5A, &HA0, &H52, &H3B, &HD6, &HB3, &H29, &HE3, &H2F, &H84, _
  171.         &H53, &HD1, &H0, &HED, &H20, &HFC, &HB1, &H5B, &H6A, &HCB, &HBE, &H39, &H4A, &H4C, &H58, &HCF, _
  172.         &HD0, &HEF, &HAA, &HFB, &H43, &H4D, &H33, &H85, &H45, &HF9, &H2, &H7F, &H50, &H3C, &H9F, &HA8, _
  173.         &H51, &HA3, &H40, &H8F, &H92, &H9D, &H38, &HF5, &HBC, &HB6, &HDA, &H21, &H10, &HFF, &HF3, &HD2, _
  174.         &HCD, &HC, &H13, &HEC, &H5F, &H97, &H44, &H17, &HC4, &HA7, &H7E, &H3D, &H64, &H5D, &H19, &H73, _
  175.         &H60, &H81, &H4F, &HDC, &H22, &H2A, &H90, &H88, &H46, &HEE, &HB8, &H14, &HDE, &H5E, &HB, &HDB, _
  176.         &HE0, &H32, &H3A, &HA, &H49, &H6, &H24, &H5C, &HC2, &HD3, &HAC, &H62, &H91, &H95, &HE4, &H79, _
  177.         &HE7, &HC8, &H37, &H6D, &H8D, &HD5, &H4E, &HA9, &H6C, &H56, &HF4, &HEA, &H65, &H7A, &HAE, &H8, _
  178.         &HBA, &H78, &H25, &H2E, &H1C, &HA6, &HB4, &HC6, &HE8, &HDD, &H74, &H1F, &H4B, &HBD, &H8B, &H8A, _
  179.         &H70, &H3E, &HB5, &H66, &H48, &H3, &HF6, &HE, &H61, &H35, &H57, &HB9, &H86, &HC1, &H1D, &H9E, _
  180.         &HE1, &HF8, &H98, &H11, &H69, &HD9, &H8E, &H94, &H9B, &H1E, &H87, &HE9, &HCE, &H55, &H28, &HDF, _
  181.         &H8C, &HA1, &H89, &HD, &HBF, &HE6, &H42, &H68, &H41, &H99, &H2D, &HF, &HB0, &H54, &HBB, &H16)
  182.  
  183.     sboxinv = Array( _
  184.         &H52, &H9, &H6A, &HD5, &H30, &H36, &HA5, &H38, &HBF, &H40, &HA3, &H9E, &H81, &HF3, &HD7, &HFB, _
  185.         &H7C, &HE3, &H39, &H82, &H9B, &H2F, &HFF, &H87, &H34, &H8E, &H43, &H44, &HC4, &HDE, &HE9, &HCB, _
  186.         &H54, &H7B, &H94, &H32, &HA6, &HC2, &H23, &H3D, &HEE, &H4C, &H95, &HB, &H42, &HFA, &HC3, &H4E, _
  187.         &H8, &H2E, &HA1, &H66, &H28, &HD9, &H24, &HB2, &H76, &H5B, &HA2, &H49, &H6D, &H8B, &HD1, &H25, _
  188.         &H72, &HF8, &HF6, &H64, &H86, &H68, &H98, &H16, &HD4, &HA4, &H5C, &HCC, &H5D, &H65, &HB6, &H92, _
  189.         &H6C, &H70, &H48, &H50, &HFD, &HED, &HB9, &HDA, &H5E, &H15, &H46, &H57, &HA7, &H8D, &H9D, &H84, _
  190.         &H90, &HD8, &HAB, &H0, &H8C, &HBC, &HD3, &HA, &HF7, &HE4, &H58, &H5, &HB8, &HB3, &H45, &H6, _
  191.         &HD0, &H2C, &H1E, &H8F, &HCA, &H3F, &HF, &H2, &HC1, &HAF, &HBD, &H3, &H1, &H13, &H8A, &H6B, _
  192.         &H3A, &H91, &H11, &H41, &H4F, &H67, &HDC, &HEA, &H97, &HF2, &HCF, &HCE, &HF0, &HB4, &HE6, &H73, _
  193.         &H96, &HAC, &H74, &H22, &HE7, &HAD, &H35, &H85, &HE2, &HF9, &H37, &HE8, &H1C, &H75, &HDF, &H6E, _
  194.         &H47, &HF1, &H1A, &H71, &H1D, &H29, &HC5, &H89, &H6F, &HB7, &H62, &HE, &HAA, &H18, &HBE, &H1B, _
  195.         &HFC, &H56, &H3E, &H4B, &HC6, &HD2, &H79, &H20, &H9A, &HDB, &HC0, &HFE, &H78, &HCD, &H5A, &HF4, _
  196.         &H1F, &HDD, &HA8, &H33, &H88, &H7, &HC7, &H31, &HB1, &H12, &H10, &H59, &H27, &H80, &HEC, &H5F, _
  197.         &H60, &H51, &H7F, &HA9, &H19, &HB5, &H4A, &HD, &H2D, &HE5, &H7A, &H9F, &H93, &HC9, &H9C, &HEF, _
  198.         &HA0, &HE0, &H3B, &H4D, &HAE, &H2A, &HF5, &HB0, &HC8, &HEB, &HBB, &H3C, &H83, &H53, &H99, &H61, _
  199.         &H17, &H2B, &H4, &H7E, &HBA, &H77, &HD6, &H26, &HE1, &H69, &H14, &H63, &H55, &H21, &HC, &H7D)
  200.  
  201.     rcon = Array( _
  202.         &H8D, &H1, &H2, &H4, &H8, &H10, &H20, &H40, &H80, &H1B, &H36, &H6C, &HD8, &HAB, &H4D, &H9A, _
  203.         &H2F, &H5E, &HBC, &H63, &HC6, &H97, &H35, &H6A, &HD4, &HB3, &H7D, &HFA, &HEF, &HC5, &H91, &H39, _
  204.         &H72, &HE4, &HD3, &HBD, &H61, &HC2, &H9F, &H25, &H4A, &H94, &H33, &H66, &HCC, &H83, &H1D, &H3A, _
  205.         &H74, &HE8, &HCB, &H8D, &H1, &H2, &H4, &H8, &H10, &H20, &H40, &H80, &H1B, &H36, &H6C, &HD8, _
  206.         &HAB, &H4D, &H9A, &H2F, &H5E, &HBC, &H63, &HC6, &H97, &H35, &H6A, &HD4, &HB3, &H7D, &HFA, &HEF, _
  207.         &HC5, &H91, &H39, &H72, &HE4, &HD3, &HBD, &H61, &HC2, &H9F, &H25, &H4A, &H94, &H33, &H66, &HCC, _
  208.         &H83, &H1D, &H3A, &H74, &HE8, &HCB, &H8D, &H1, &H2, &H4, &H8, &H10, &H20, &H40, &H80, &H1B, _
  209.         &H36, &H6C, &HD8, &HAB, &H4D, &H9A, &H2F, &H5E, &HBC, &H63, &HC6, &H97, &H35, &H6A, &HD4, &HB3, _
  210.         &H7D, &HFA, &HEF, &HC5, &H91, &H39, &H72, &HE4, &HD3, &HBD, &H61, &HC2, &H9F, &H25, &H4A, &H94, _
  211.         &H33, &H66, &HCC, &H83, &H1D, &H3A, &H74, &HE8, &HCB, &H8D, &H1, &H2, &H4, &H8, &H10, &H20, _
  212.         &H40, &H80, &H1B, &H36, &H6C, &HD8, &HAB, &H4D, &H9A, &H2F, &H5E, &HBC, &H63, &HC6, &H97, &H35, _
  213.         &H6A, &HD4, &HB3, &H7D, &HFA, &HEF, &HC5, &H91, &H39, &H72, &HE4, &HD3, &HBD, &H61, &HC2, &H9F, _
  214.         &H25, &H4A, &H94, &H33, &H66, &HCC, &H83, &H1D, &H3A, &H74, &HE8, &HCB, &H8D, &H1, &H2, &H4, _
  215.         &H8, &H10, &H20, &H40, &H80, &H1B, &H36, &H6C, &HD8, &HAB, &H4D, &H9A, &H2F, &H5E, &HBC, &H63, _
  216.         &HC6, &H97, &H35, &H6A, &HD4, &HB3, &H7D, &HFA, &HEF, &HC5, &H91, &H39, &H72, &HE4, &HD3, &HBD, _
  217.         &H61, &HC2, &H9F, &H25, &H4A, &H94, &H33, &H66, &HCC, &H83, &H1D, &H3A, &H74, &HE8, &HCB)
  218.  
  219.     Dim expandedKey, block(16) As Double, aesKey(32) As Double, i As Integer, j As Integer
  220.     Dim isDone As Boolean, isEncode As Boolean
  221.     Dim sCipher, sTemp, nonce(16), priorCipher(16)
  222.     Dim x As Integer, r As Integer, y As Integer, temp(4), intTemp
  223.  
  224.  
  225.  
  226.  
  227.     If Left(sPlain, 3) <> "xxx" Then
  228.  
  229.         isEncode = True
  230.     Else
  231.         sPlain = Right(sPlain, Len(sPlain) - 3)
  232.         isEncode = False
  233.     End If
  234.  
  235.  
  236.  If sNonce <> "" Then
  237.     For i = 0 To 15
  238.         nonce(i) = Asc(Mid(sNonce, (i Mod Len(sNonce)) + 1, 1))
  239.     Next
  240.    Else
  241.         For i = 0 To 15
  242.         nonce(i) = 0
  243.     Next
  244.     End If
  245.     If sPass = "" Then sPass = "password"
  246.  
  247.     For i = 0 To (Len(sPass) - 1)
  248.         aesKey(i) = Asc(Mid(sPass, i + 1, 1))
  249.     Next
  250.  
  251.     For i = Len(sPass) To 31
  252.         aesKey(i) = 0
  253.     Next
  254.  
  255.     expandedKey = expandKey(aesKey, sbox, rcon)
  256.     j = 0
  257.     isDone = False
  258.  
  259.     Do Until isDone
  260.         sTemp = Mid(sPlain, j * 16 + 1, 16)
  261.  
  262.         If Len(sTemp) < 16 Then
  263.             For i = Len(sTemp) To 15
  264.                 sTemp = sTemp & Chr(0)
  265.             Next
  266.         End If
  267.  
  268.         For i = 0 To 15
  269.             block(i) = Asc(Mid(sTemp, (i Mod 4) * 4 + (i \ 4) + 1, 1))
  270.         Next
  271.  
  272.         If (j + 1) * 16 >= Len(sPlain) Then
  273.             isDone = True
  274.         End If
  275.  
  276.         j = j + 1
  277.  
  278.         If isEncode Then
  279.             r = 0
  280.             For i = 0 To 15
  281.                 block(i) = block(i) Xor nonce(i) Xor expandedKey((i Mod 4) * 4 + (i \ 4))
  282.             Next
  283.  
  284.             For x = 1 To 13
  285.                 block(0) = sbox(block(0))
  286.                 block(1) = sbox(block(1))
  287.                 block(2) = sbox(block(2))
  288.                 block(3) = sbox(block(3))
  289.  
  290.                 intTemp = sbox(block(4))
  291.                 block(4) = sbox(block(5))
  292.                 block(5) = sbox(block(6))
  293.                 block(6) = sbox(block(7))
  294.                 block(7) = intTemp
  295.  
  296.                 intTemp = sbox(block(8))
  297.                 block(8) = sbox(block(10))
  298.                 block(10) = intTemp
  299.                 intTemp = sbox(block(9))
  300.                 block(9) = sbox(block(11))
  301.                 block(11) = intTemp
  302.  
  303.                 intTemp = sbox(block(12))
  304.                 block(12) = sbox(block(15))
  305.                 block(15) = sbox(block(14))
  306.                 block(14) = sbox(block(13))
  307.                 block(13) = intTemp
  308.  
  309.                 r = x * 16
  310.                 For i = 0 To 3
  311.                     temp(0) = block(i)
  312.                     temp(1) = block(i + 4)
  313.                     temp(2) = block(i + 8)
  314.                     temp(3) = block(i + 12)
  315.  
  316.                     block(i) = g2(temp(0)) Xor temp(3) Xor temp(2) Xor g3(temp(1)) Xor expandedKey(r + i * 4)
  317.                     block(i + 4) = g2(temp(1)) Xor temp(0) Xor temp(3) Xor g3(temp(2)) Xor expandedKey(r + i * 4 + 1)
  318.                     block(i + 8) = g2(temp(2)) Xor temp(1) Xor temp(0) Xor g3(temp(3)) Xor expandedKey(r + i * 4 + 2)
  319.                     block(i + 12) = g2(temp(3)) Xor temp(2) Xor temp(1) Xor g3(temp(0)) Xor expandedKey(r + i * 4 + 3)
  320.                 Next
  321.             Next
  322.  
  323.             block(0) = sbox(block(0)) Xor expandedKey(224)
  324.             block(1) = sbox(block(1)) Xor expandedKey(228)
  325.             block(2) = sbox(block(2)) Xor expandedKey(232)
  326.             block(3) = sbox(block(3)) Xor expandedKey(236)
  327.  
  328.             intTemp = sbox(block(4)) Xor expandedKey(237)
  329.             block(4) = sbox(block(5)) Xor expandedKey(225)
  330.             block(5) = sbox(block(6)) Xor expandedKey(229)
  331.             block(6) = sbox(block(7)) Xor expandedKey(233)
  332.             block(7) = intTemp
  333.  
  334.             intTemp = sbox(block(8)) Xor expandedKey(234)
  335.             block(8) = sbox(block(10)) Xor expandedKey(226)
  336.             block(10) = intTemp
  337.             intTemp = sbox(block(9)) Xor expandedKey(238)
  338.             block(9) = sbox(block(11)) Xor expandedKey(230)
  339.             block(11) = intTemp
  340.  
  341.             intTemp = sbox(block(12)) Xor expandedKey(231)
  342.             block(12) = sbox(block(15)) Xor expandedKey(227)
  343.             block(15) = sbox(block(14)) Xor expandedKey(239)
  344.             block(14) = sbox(block(13)) Xor expandedKey(235)
  345.             block(13) = intTemp
  346.  
  347.             For i = 0 To 15
  348.                 nonce(i) = block(i)
  349.             Next
  350.         Else
  351.             For i = 0 To 15
  352.                 priorCipher(i) = block(i)
  353.             Next
  354.  
  355.             block(0) = sboxinv(block(0) Xor expandedKey(224))
  356.             block(1) = sboxinv(block(1) Xor expandedKey(228))
  357.             block(2) = sboxinv(block(2) Xor expandedKey(232))
  358.             block(3) = sboxinv(block(3) Xor expandedKey(236))
  359.  
  360.             intTemp = sboxinv(block(4) Xor expandedKey(225))
  361.             block(4) = sboxinv(block(7) Xor expandedKey(237))
  362.             block(7) = sboxinv(block(6) Xor expandedKey(233))
  363.             block(6) = sboxinv(block(5) Xor expandedKey(229))
  364.             block(5) = intTemp
  365.  
  366.             intTemp = sboxinv(block(8) Xor expandedKey(226))
  367.             block(8) = sboxinv(block(10) Xor expandedKey(234))
  368.             block(10) = intTemp
  369.             intTemp = sboxinv(block(9) Xor expandedKey(230))
  370.             block(9) = sboxinv(block(11) Xor expandedKey(238))
  371.             block(11) = intTemp
  372.  
  373.             intTemp = sboxinv(block(12) Xor expandedKey(227))
  374.             block(12) = sboxinv(block(13) Xor expandedKey(231))
  375.             block(13) = sboxinv(block(14) Xor expandedKey(235))
  376.             block(14) = sboxinv(block(15) Xor expandedKey(239))
  377.             block(15) = intTemp
  378.  
  379.             For x = 13 To 1 Step -1
  380.                 r = x * 16
  381.  
  382.                 For i = 0 To 3
  383.                     temp(0) = block(i) Xor expandedKey(r + i * 4)
  384.                     temp(1) = block(i + 4) Xor expandedKey(r + i * 4 + 1)
  385.                     temp(2) = block(i + 8) Xor expandedKey(r + i * 4 + 2)
  386.                     temp(3) = block(i + 12) Xor expandedKey(r + i * 4 + 3)
  387.  
  388.                     block(i) = g14(temp(0)) Xor g9(temp(3)) Xor g13(temp(2)) Xor g11(temp(1))
  389.                     block(i + 4) = g14(temp(1)) Xor g9(temp(0)) Xor g13(temp(3)) Xor g11(temp(2))
  390.                     block(i + 8) = g14(temp(2)) Xor g9(temp(1)) Xor g13(temp(0)) Xor g11(temp(3))
  391.                     block(i + 12) = g14(temp(3)) Xor g9(temp(2)) Xor g13(temp(1)) Xor g11(temp(0))
  392.                 Next
  393.  
  394.                 block(0) = sboxinv(block(0))
  395.                 block(1) = sboxinv(block(1))
  396.                 block(2) = sboxinv(block(2))
  397.                 block(3) = sboxinv(block(3))
  398.  
  399.                 intTemp = sboxinv(block(4))
  400.                 block(4) = sboxinv(block(7))
  401.                 block(7) = sboxinv(block(6))
  402.                 block(6) = sboxinv(block(5))
  403.                 block(5) = intTemp
  404.  
  405.                 intTemp = sboxinv(block(8))
  406.                 block(8) = sboxinv(block(10))
  407.                 block(10) = intTemp
  408.                 intTemp = sboxinv(block(9))
  409.                 block(9) = sboxinv(block(11))
  410.                 block(11) = intTemp
  411.  
  412.                 intTemp = sboxinv(block(12))
  413.                 block(12) = sboxinv(block(13))
  414.                 block(13) = sboxinv(block(14))
  415.                 block(14) = sboxinv(block(15))
  416.                 block(15) = intTemp
  417.             Next
  418.  
  419.             r = 0
  420.             For i = 0 To 15
  421.                 block(i) = block(i) Xor expandedKey((i Mod 4) * 4 + (i \ 4)) Xor nonce(i)
  422.                 nonce(i) = priorCipher(i)
  423.             Next
  424.         End If
  425.  
  426.         For i = 0 To 15
  427.             sCipher = sCipher & Chr(block((i Mod 4) * 4 + (i \ 4)))
  428.         Next
  429.     Loop
  430.  
  431.     If isEncode Then
  432.         stringAES = "xxx" & sCipher
  433.     Else
  434.         sCipher = Replace(sCipher, Chr(0), "")
  435.         sCipher = Replace(sCipher, Chr(10), "")
  436.         sCipher = Replace(sCipher, Chr(13), "")
  437.         sCipher = Replace(sCipher, "'", "''")
  438.         stringAES = sCipher
  439.  
  440.     End If
  441. End Function
Jun 14 '16 #1
Share this Question
Share on Google+
3 Replies


P: 2
I was able to solve that problem. Excel was not reading correctly the Null character Chr(0) that was generated by the function. So I replaced it at the end of the encryption with a unique group of characters. When I went to decrypt it, I replaced that group of characters with the original Chr(0) before proceeding. Now everything is working fine.
Jun 14 '16 #2

P: 1
Hi, thanks for sharing the code.
I am trying to adapt it to elaborate Hex bytes.
Aim is to have cells of Hex bytes passed to the function and crypt/decrypt.
I have changed/adapted the expanded_key and the main function to load bytes, but not successful.
Would you mind supporting?
thanks

Expand|Select|Wrap|Line Numbers
  1. 'Option Compare Database
  2. Option Explicit
  3. 'https://bytes.com/topic/access/answers/966638-aes-question-vba-excel
  4.  
  5. Function keyScheduleCore(ByRef row(), ByVal a, ByRef box() As Variant, ByRef rcon() As Variant)
  6.     Dim result(4), i
  7.  
  8.     For i = 0 To 3
  9.         result(i) = box(row((i + 5) Mod 4))
  10.     Next
  11.  
  12.     result(0) = result(0) Xor rcon(a)
  13.     keyScheduleCore = result
  14. End Function
  15.  
  16. Function expandKey(ByRef key() As Double, ByRef box() As Variant, ByRef rcon() As Variant)
  17.     'MOD added () to array variables
  18.     Dim rConIter, temp(), i, result(240)
  19.  
  20.     ReDim temp(4)
  21.     rConIter = 1
  22.  
  23.     For i = 0 To 15
  24.         result(i) = key(i)
  25.     Next
  26.  
  27.     For i = 16 + 1 To 239 Step 4
  28.         temp(0) = result(i - 4)
  29.         temp(1) = result(i - 3)
  30.         temp(2) = result(i - 2)
  31.         temp(3) = result(i - 1)
  32.  
  33.         If i Mod 16 = 0 Then
  34.             temp = keyScheduleCore(temp, rConIter, box, rcon)
  35.             rConIter = rConIter + 1
  36.         End If
  37.  
  38.         If i Mod 16 = 8 Then
  39.             temp(0) = box(temp(0))
  40.             temp(1) = box(temp(1))
  41.             temp(2) = box(temp(2))
  42.             temp(3) = box(temp(3))
  43.         End If
  44.  
  45.         result(i) = result(i - 16) Xor temp(0)
  46.         result(i + 1) = result(i - 15) Xor temp(1)
  47.         result(i + 2) = result(i - 14) Xor temp(2)
  48.         result(i + 3) = result(i - 13) Xor temp(3)
  49.     Next
  50.  
  51.     expandKey = result
  52. End Function
  53.  
  54. Function stringAES(sPlain As String, sPass As String, toCrypt As Boolean, Optional snOnce As String) As String
  55. ''
  56. ''Based on code by Rabbit
  57. 'http://bytes.com/topic/access/insights/906850-aes-encryption-algorithm-vba-vbscript
  58. 'See the ECM version for the changes
  59.     Dim sbox() As Variant, sboxinv() As Variant, rcon() As Variant
  60.     Dim g2() As Variant, g3() As Variant, g9() As Variant, g11() As Variant, g13() As Variant, g14() As Variant
  61.  
  62.     g2 = Array( _
  63.         &H0, &H2, &H4, &H6, &H8, &HA, &HC, &HE, &H10, &H12, &H14, &H16, &H18, &H1A, &H1C, &H1E, _
  64.         &H20, &H22, &H24, &H26, &H28, &H2A, &H2C, &H2E, &H30, &H32, &H34, &H36, &H38, &H3A, &H3C, &H3E, _
  65.         &H40, &H42, &H44, &H46, &H48, &H4A, &H4C, &H4E, &H50, &H52, &H54, &H56, &H58, &H5A, &H5C, &H5E, _
  66.         &H60, &H62, &H64, &H66, &H68, &H6A, &H6C, &H6E, &H70, &H72, &H74, &H76, &H78, &H7A, &H7C, &H7E, _
  67.         &H80, &H82, &H84, &H86, &H88, &H8A, &H8C, &H8E, &H90, &H92, &H94, &H96, &H98, &H9A, &H9C, &H9E, _
  68.         &HA0, &HA2, &HA4, &HA6, &HA8, &HAA, &HAC, &HAE, &HB0, &HB2, &HB4, &HB6, &HB8, &HBA, &HBC, &HBE, _
  69.         &HC0, &HC2, &HC4, &HC6, &HC8, &HCA, &HCC, &HCE, &HD0, &HD2, &HD4, &HD6, &HD8, &HDA, &HDC, &HDE, _
  70.         &HE0, &HE2, &HE4, &HE6, &HE8, &HEA, &HEC, &HEE, &HF0, &HF2, &HF4, &HF6, &HF8, &HFA, &HFC, &HFE, _
  71.         &H1B, &H19, &H1F, &H1D, &H13, &H11, &H17, &H15, &HB, &H9, &HF, &HD, &H3, &H1, &H7, &H5, _
  72.         &H3B, &H39, &H3F, &H3D, &H33, &H31, &H37, &H35, &H2B, &H29, &H2F, &H2D, &H23, &H21, &H27, &H25, _
  73.         &H5B, &H59, &H5F, &H5D, &H53, &H51, &H57, &H55, &H4B, &H49, &H4F, &H4D, &H43, &H41, &H47, &H45, _
  74.         &H7B, &H79, &H7F, &H7D, &H73, &H71, &H77, &H75, &H6B, &H69, &H6F, &H6D, &H63, &H61, &H67, &H65, _
  75.         &H9B, &H99, &H9F, &H9D, &H93, &H91, &H97, &H95, &H8B, &H89, &H8F, &H8D, &H83, &H81, &H87, &H85, _
  76.         &HBB, &HB9, &HBF, &HBD, &HB3, &HB1, &HB7, &HB5, &HAB, &HA9, &HAF, &HAD, &HA3, &HA1, &HA7, &HA5, _
  77.         &HDB, &HD9, &HDF, &HDD, &HD3, &HD1, &HD7, &HD5, &HCB, &HC9, &HCF, &HCD, &HC3, &HC1, &HC7, &HC5, _
  78.         &HFB, &HF9, &HFF, &HFD, &HF3, &HF1, &HF7, &HF5, &HEB, &HE9, &HEF, &HED, &HE3, &HE1, &HE7, &HE5)
  79.  
  80.     g3 = Array( _
  81.         &H0, &H3, &H6, &H5, &HC, &HF, &HA, &H9, &H18, &H1B, &H1E, &H1D, &H14, &H17, &H12, &H11, _
  82.         &H30, &H33, &H36, &H35, &H3C, &H3F, &H3A, &H39, &H28, &H2B, &H2E, &H2D, &H24, &H27, &H22, &H21, _
  83.         &H60, &H63, &H66, &H65, &H6C, &H6F, &H6A, &H69, &H78, &H7B, &H7E, &H7D, &H74, &H77, &H72, &H71, _
  84.         &H50, &H53, &H56, &H55, &H5C, &H5F, &H5A, &H59, &H48, &H4B, &H4E, &H4D, &H44, &H47, &H42, &H41, _
  85.         &HC0, &HC3, &HC6, &HC5, &HCC, &HCF, &HCA, &HC9, &HD8, &HDB, &HDE, &HDD, &HD4, &HD7, &HD2, &HD1, _
  86.         &HF0, &HF3, &HF6, &HF5, &HFC, &HFF, &HFA, &HF9, &HE8, &HEB, &HEE, &HED, &HE4, &HE7, &HE2, &HE1, _
  87.         &HA0, &HA3, &HA6, &HA5, &HAC, &HAF, &HAA, &HA9, &HB8, &HBB, &HBE, &HBD, &HB4, &HB7, &HB2, &HB1, _
  88.         &H90, &H93, &H96, &H95, &H9C, &H9F, &H9A, &H99, &H88, &H8B, &H8E, &H8D, &H84, &H87, &H82, &H81, _
  89.         &H9B, &H98, &H9D, &H9E, &H97, &H94, &H91, &H92, &H83, &H80, &H85, &H86, &H8F, &H8C, &H89, &H8A, _
  90.         &HAB, &HA8, &HAD, &HAE, &HA7, &HA4, &HA1, &HA2, &HB3, &HB0, &HB5, &HB6, &HBF, &HBC, &HB9, &HBA, _
  91.         &HFB, &HF8, &HFD, &HFE, &HF7, &HF4, &HF1, &HF2, &HE3, &HE0, &HE5, &HE6, &HEF, &HEC, &HE9, &HEA, _
  92.         &HCB, &HC8, &HCD, &HCE, &HC7, &HC4, &HC1, &HC2, &HD3, &HD0, &HD5, &HD6, &HDF, &HDC, &HD9, &HDA, _
  93.         &H5B, &H58, &H5D, &H5E, &H57, &H54, &H51, &H52, &H43, &H40, &H45, &H46, &H4F, &H4C, &H49, &H4A, _
  94.         &H6B, &H68, &H6D, &H6E, &H67, &H64, &H61, &H62, &H73, &H70, &H75, &H76, &H7F, &H7C, &H79, &H7A, _
  95.         &H3B, &H38, &H3D, &H3E, &H37, &H34, &H31, &H32, &H23, &H20, &H25, &H26, &H2F, &H2C, &H29, &H2A, _
  96.         &HB, &H8, &HD, &HE, &H7, &H4, &H1, &H2, &H13, &H10, &H15, &H16, &H1F, &H1C, &H19, &H1A)
  97.  
  98.     g9 = Array( _
  99.         &H0, &H9, &H12, &H1B, &H24, &H2D, &H36, &H3F, &H48, &H41, &H5A, &H53, &H6C, &H65, &H7E, &H77, _
  100.         &H90, &H99, &H82, &H8B, &HB4, &HBD, &HA6, &HAF, &HD8, &HD1, &HCA, &HC3, &HFC, &HF5, &HEE, &HE7, _
  101.         &H3B, &H32, &H29, &H20, &H1F, &H16, &HD, &H4, &H73, &H7A, &H61, &H68, &H57, &H5E, &H45, &H4C, _
  102.         &HAB, &HA2, &HB9, &HB0, &H8F, &H86, &H9D, &H94, &HE3, &HEA, &HF1, &HF8, &HC7, &HCE, &HD5, &HDC, _
  103.         &H76, &H7F, &H64, &H6D, &H52, &H5B, &H40, &H49, &H3E, &H37, &H2C, &H25, &H1A, &H13, &H8, &H1, _
  104.         &HE6, &HEF, &HF4, &HFD, &HC2, &HCB, &HD0, &HD9, &HAE, &HA7, &HBC, &HB5, &H8A, &H83, &H98, &H91, _
  105.         &H4D, &H44, &H5F, &H56, &H69, &H60, &H7B, &H72, &H5, &HC, &H17, &H1E, &H21, &H28, &H33, &H3A, _
  106.         &HDD, &HD4, &HCF, &HC6, &HF9, &HF0, &HEB, &HE2, &H95, &H9C, &H87, &H8E, &HB1, &HB8, &HA3, &HAA, _
  107.         &HEC, &HE5, &HFE, &HF7, &HC8, &HC1, &HDA, &HD3, &HA4, &HAD, &HB6, &HBF, &H80, &H89, &H92, &H9B, _
  108.         &H7C, &H75, &H6E, &H67, &H58, &H51, &H4A, &H43, &H34, &H3D, &H26, &H2F, &H10, &H19, &H2, &HB, _
  109.         &HD7, &HDE, &HC5, &HCC, &HF3, &HFA, &HE1, &HE8, &H9F, &H96, &H8D, &H84, &HBB, &HB2, &HA9, &HA0, _
  110.         &H47, &H4E, &H55, &H5C, &H63, &H6A, &H71, &H78, &HF, &H6, &H1D, &H14, &H2B, &H22, &H39, &H30, _
  111.         &H9A, &H93, &H88, &H81, &HBE, &HB7, &HAC, &HA5, &HD2, &HDB, &HC0, &HC9, &HF6, &HFF, &HE4, &HED, _
  112.         &HA, &H3, &H18, &H11, &H2E, &H27, &H3C, &H35, &H42, &H4B, &H50, &H59, &H66, &H6F, &H74, &H7D, _
  113.         &HA1, &HA8, &HB3, &HBA, &H85, &H8C, &H97, &H9E, &HE9, &HE0, &HFB, &HF2, &HCD, &HC4, &HDF, &HD6, _
  114.         &H31, &H38, &H23, &H2A, &H15, &H1C, &H7, &HE, &H79, &H70, &H6B, &H62, &H5D, &H54, &H4F, &H46)
  115.  
  116.     g11 = Array( _
  117.         &H0, &HB, &H16, &H1D, &H2C, &H27, &H3A, &H31, &H58, &H53, &H4E, &H45, &H74, &H7F, &H62, &H69, _
  118.         &HB0, &HBB, &HA6, &HAD, &H9C, &H97, &H8A, &H81, &HE8, &HE3, &HFE, &HF5, &HC4, &HCF, &HD2, &HD9, _
  119.         &H7B, &H70, &H6D, &H66, &H57, &H5C, &H41, &H4A, &H23, &H28, &H35, &H3E, &HF, &H4, &H19, &H12, _
  120.         &HCB, &HC0, &HDD, &HD6, &HE7, &HEC, &HF1, &HFA, &H93, &H98, &H85, &H8E, &HBF, &HB4, &HA9, &HA2, _
  121.         &HF6, &HFD, &HE0, &HEB, &HDA, &HD1, &HCC, &HC7, &HAE, &HA5, &HB8, &HB3, &H82, &H89, &H94, &H9F, _
  122.         &H46, &H4D, &H50, &H5B, &H6A, &H61, &H7C, &H77, &H1E, &H15, &H8, &H3, &H32, &H39, &H24, &H2F, _
  123.         &H8D, &H86, &H9B, &H90, &HA1, &HAA, &HB7, &HBC, &HD5, &HDE, &HC3, &HC8, &HF9, &HF2, &HEF, &HE4, _
  124.         &H3D, &H36, &H2B, &H20, &H11, &H1A, &H7, &HC, &H65, &H6E, &H73, &H78, &H49, &H42, &H5F, &H54, _
  125.         &HF7, &HFC, &HE1, &HEA, &HDB, &HD0, &HCD, &HC6, &HAF, &HA4, &HB9, &HB2, &H83, &H88, &H95, &H9E, _
  126.         &H47, &H4C, &H51, &H5A, &H6B, &H60, &H7D, &H76, &H1F, &H14, &H9, &H2, &H33, &H38, &H25, &H2E, _
  127.         &H8C, &H87, &H9A, &H91, &HA0, &HAB, &HB6, &HBD, &HD4, &HDF, &HC2, &HC9, &HF8, &HF3, &HEE, &HE5, _
  128.         &H3C, &H37, &H2A, &H21, &H10, &H1B, &H6, &HD, &H64, &H6F, &H72, &H79, &H48, &H43, &H5E, &H55, _
  129.         &H1, &HA, &H17, &H1C, &H2D, &H26, &H3B, &H30, &H59, &H52, &H4F, &H44, &H75, &H7E, &H63, &H68, _
  130.         &HB1, &HBA, &HA7, &HAC, &H9D, &H96, &H8B, &H80, &HE9, &HE2, &HFF, &HF4, &HC5, &HCE, &HD3, &HD8, _
  131.         &H7A, &H71, &H6C, &H67, &H56, &H5D, &H40, &H4B, &H22, &H29, &H34, &H3F, &HE, &H5, &H18, &H13, _
  132.         &HCA, &HC1, &HDC, &HD7, &HE6, &HED, &HF0, &HFB, &H92, &H99, &H84, &H8F, &HBE, &HB5, &HA8, &HA3)
  133.  
  134.     g13 = Array( _
  135.         &H0, &HD, &H1A, &H17, &H34, &H39, &H2E, &H23, &H68, &H65, &H72, &H7F, &H5C, &H51, &H46, &H4B, _
  136.         &HD0, &HDD, &HCA, &HC7, &HE4, &HE9, &HFE, &HF3, &HB8, &HB5, &HA2, &HAF, &H8C, &H81, &H96, &H9B, _
  137.         &HBB, &HB6, &HA1, &HAC, &H8F, &H82, &H95, &H98, &HD3, &HDE, &HC9, &HC4, &HE7, &HEA, &HFD, &HF0, _
  138.         &H6B, &H66, &H71, &H7C, &H5F, &H52, &H45, &H48, &H3, &HE, &H19, &H14, &H37, &H3A, &H2D, &H20, _
  139.         &H6D, &H60, &H77, &H7A, &H59, &H54, &H43, &H4E, &H5, &H8, &H1F, &H12, &H31, &H3C, &H2B, &H26, _
  140.         &HBD, &HB0, &HA7, &HAA, &H89, &H84, &H93, &H9E, &HD5, &HD8, &HCF, &HC2, &HE1, &HEC, &HFB, &HF6, _
  141.         &HD6, &HDB, &HCC, &HC1, &HE2, &HEF, &HF8, &HF5, &HBE, &HB3, &HA4, &HA9, &H8A, &H87, &H90, &H9D, _
  142.         &H6, &HB, &H1C, &H11, &H32, &H3F, &H28, &H25, &H6E, &H63, &H74, &H79, &H5A, &H57, &H40, &H4D, _
  143.         &HDA, &HD7, &HC0, &HCD, &HEE, &HE3, &HF4, &HF9, &HB2, &HBF, &HA8, &HA5, &H86, &H8B, &H9C, &H91, _
  144.         &HA, &H7, &H10, &H1D, &H3E, &H33, &H24, &H29, &H62, &H6F, &H78, &H75, &H56, &H5B, &H4C, &H41, _
  145.         &H61, &H6C, &H7B, &H76, &H55, &H58, &H4F, &H42, &H9, &H4, &H13, &H1E, &H3D, &H30, &H27, &H2A, _
  146.         &HB1, &HBC, &HAB, &HA6, &H85, &H88, &H9F, &H92, &HD9, &HD4, &HC3, &HCE, &HED, &HE0, &HF7, &HFA, _
  147.         &HB7, &HBA, &HAD, &HA0, &H83, &H8E, &H99, &H94, &HDF, &HD2, &HC5, &HC8, &HEB, &HE6, &HF1, &HFC, _
  148.         &H67, &H6A, &H7D, &H70, &H53, &H5E, &H49, &H44, &HF, &H2, &H15, &H18, &H3B, &H36, &H21, &H2C, _
  149.         &HC, &H1, &H16, &H1B, &H38, &H35, &H22, &H2F, &H64, &H69, &H7E, &H73, &H50, &H5D, &H4A, &H47, _
  150.         &HDC, &HD1, &HC6, &HCB, &HE8, &HE5, &HF2, &HFF, &HB4, &HB9, &HAE, &HA3, &H80, &H8D, &H9A, &H97)
  151.  
  152.     g14 = Array( _
  153.         &H0, &HE, &H1C, &H12, &H38, &H36, &H24, &H2A, &H70, &H7E, &H6C, &H62, &H48, &H46, &H54, &H5A, _
  154.         &HE0, &HEE, &HFC, &HF2, &HD8, &HD6, &HC4, &HCA, &H90, &H9E, &H8C, &H82, &HA8, &HA6, &HB4, &HBA, _
  155.         &HDB, &HD5, &HC7, &HC9, &HE3, &HED, &HFF, &HF1, &HAB, &HA5, &HB7, &HB9, &H93, &H9D, &H8F, &H81, _
  156.         &H3B, &H35, &H27, &H29, &H3, &HD, &H1F, &H11, &H4B, &H45, &H57, &H59, &H73, &H7D, &H6F, &H61, _
  157.         &HAD, &HA3, &HB1, &HBF, &H95, &H9B, &H89, &H87, &HDD, &HD3, &HC1, &HCF, &HE5, &HEB, &HF9, &HF7, _
  158.         &H4D, &H43, &H51, &H5F, &H75, &H7B, &H69, &H67, &H3D, &H33, &H21, &H2F, &H5, &HB, &H19, &H17, _
  159.         &H76, &H78, &H6A, &H64, &H4E, &H40, &H52, &H5C, &H6, &H8, &H1A, &H14, &H3E, &H30, &H22, &H2C, _
  160.         &H96, &H98, &H8A, &H84, &HAE, &HA0, &HB2, &HBC, &HE6, &HE8, &HFA, &HF4, &HDE, &HD0, &HC2, &HCC, _
  161.         &H41, &H4F, &H5D, &H53, &H79, &H77, &H65, &H6B, &H31, &H3F, &H2D, &H23, &H9, &H7, &H15, &H1B, _
  162.         &HA1, &HAF, &HBD, &HB3, &H99, &H97, &H85, &H8B, &HD1, &HDF, &HCD, &HC3, &HE9, &HE7, &HF5, &HFB, _
  163.         &H9A, &H94, &H86, &H88, &HA2, &HAC, &HBE, &HB0, &HEA, &HE4, &HF6, &HF8, &HD2, &HDC, &HCE, &HC0, _
  164.         &H7A, &H74, &H66, &H68, &H42, &H4C, &H5E, &H50, &HA, &H4, &H16, &H18, &H32, &H3C, &H2E, &H20, _
  165.         &HEC, &HE2, &HF0, &HFE, &HD4, &HDA, &HC8, &HC6, &H9C, &H92, &H80, &H8E, &HA4, &HAA, &HB8, &HB6, _
  166.         &HC, &H2, &H10, &H1E, &H34, &H3A, &H28, &H26, &H7C, &H72, &H60, &H6E, &H44, &H4A, &H58, &H56, _
  167.         &H37, &H39, &H2B, &H25, &HF, &H1, &H13, &H1D, &H47, &H49, &H5B, &H55, &H7F, &H71, &H63, &H6D, _
  168.         &HD7, &HD9, &HCB, &HC5, &HEF, &HE1, &HF3, &HFD, &HA7, &HA9, &HBB, &HB5, &H9F, &H91, &H83, &H8D)
  169.  
  170.     sbox = Array( _
  171.         &H63, &H7C, &H77, &H7B, &HF2, &H6B, &H6F, &HC5, &H30, &H1, &H67, &H2B, &HFE, &HD7, &HAB, &H76, _
  172.         &HCA, &H82, &HC9, &H7D, &HFA, &H59, &H47, &HF0, &HAD, &HD4, &HA2, &HAF, &H9C, &HA4, &H72, &HC0, _
  173.         &HB7, &HFD, &H93, &H26, &H36, &H3F, &HF7, &HCC, &H34, &HA5, &HE5, &HF1, &H71, &HD8, &H31, &H15, _
  174.         &H4, &HC7, &H23, &HC3, &H18, &H96, &H5, &H9A, &H7, &H12, &H80, &HE2, &HEB, &H27, &HB2, &H75, _
  175.         &H9, &H83, &H2C, &H1A, &H1B, &H6E, &H5A, &HA0, &H52, &H3B, &HD6, &HB3, &H29, &HE3, &H2F, &H84, _
  176.         &H53, &HD1, &H0, &HED, &H20, &HFC, &HB1, &H5B, &H6A, &HCB, &HBE, &H39, &H4A, &H4C, &H58, &HCF, _
  177.         &HD0, &HEF, &HAA, &HFB, &H43, &H4D, &H33, &H85, &H45, &HF9, &H2, &H7F, &H50, &H3C, &H9F, &HA8, _
  178.         &H51, &HA3, &H40, &H8F, &H92, &H9D, &H38, &HF5, &HBC, &HB6, &HDA, &H21, &H10, &HFF, &HF3, &HD2, _
  179.         &HCD, &HC, &H13, &HEC, &H5F, &H97, &H44, &H17, &HC4, &HA7, &H7E, &H3D, &H64, &H5D, &H19, &H73, _
  180.         &H60, &H81, &H4F, &HDC, &H22, &H2A, &H90, &H88, &H46, &HEE, &HB8, &H14, &HDE, &H5E, &HB, &HDB, _
  181.         &HE0, &H32, &H3A, &HA, &H49, &H6, &H24, &H5C, &HC2, &HD3, &HAC, &H62, &H91, &H95, &HE4, &H79, _
  182.         &HE7, &HC8, &H37, &H6D, &H8D, &HD5, &H4E, &HA9, &H6C, &H56, &HF4, &HEA, &H65, &H7A, &HAE, &H8, _
  183.         &HBA, &H78, &H25, &H2E, &H1C, &HA6, &HB4, &HC6, &HE8, &HDD, &H74, &H1F, &H4B, &HBD, &H8B, &H8A, _
  184.         &H70, &H3E, &HB5, &H66, &H48, &H3, &HF6, &HE, &H61, &H35, &H57, &HB9, &H86, &HC1, &H1D, &H9E, _
  185.         &HE1, &HF8, &H98, &H11, &H69, &HD9, &H8E, &H94, &H9B, &H1E, &H87, &HE9, &HCE, &H55, &H28, &HDF, _
  186.         &H8C, &HA1, &H89, &HD, &HBF, &HE6, &H42, &H68, &H41, &H99, &H2D, &HF, &HB0, &H54, &HBB, &H16)
  187.  
  188.     sboxinv = Array( _
  189.         &H52, &H9, &H6A, &HD5, &H30, &H36, &HA5, &H38, &HBF, &H40, &HA3, &H9E, &H81, &HF3, &HD7, &HFB, _
  190.         &H7C, &HE3, &H39, &H82, &H9B, &H2F, &HFF, &H87, &H34, &H8E, &H43, &H44, &HC4, &HDE, &HE9, &HCB, _
  191.         &H54, &H7B, &H94, &H32, &HA6, &HC2, &H23, &H3D, &HEE, &H4C, &H95, &HB, &H42, &HFA, &HC3, &H4E, _
  192.         &H8, &H2E, &HA1, &H66, &H28, &HD9, &H24, &HB2, &H76, &H5B, &HA2, &H49, &H6D, &H8B, &HD1, &H25, _
  193.         &H72, &HF8, &HF6, &H64, &H86, &H68, &H98, &H16, &HD4, &HA4, &H5C, &HCC, &H5D, &H65, &HB6, &H92, _
  194.         &H6C, &H70, &H48, &H50, &HFD, &HED, &HB9, &HDA, &H5E, &H15, &H46, &H57, &HA7, &H8D, &H9D, &H84, _
  195.         &H90, &HD8, &HAB, &H0, &H8C, &HBC, &HD3, &HA, &HF7, &HE4, &H58, &H5, &HB8, &HB3, &H45, &H6, _
  196.         &HD0, &H2C, &H1E, &H8F, &HCA, &H3F, &HF, &H2, &HC1, &HAF, &HBD, &H3, &H1, &H13, &H8A, &H6B, _
  197.         &H3A, &H91, &H11, &H41, &H4F, &H67, &HDC, &HEA, &H97, &HF2, &HCF, &HCE, &HF0, &HB4, &HE6, &H73, _
  198.         &H96, &HAC, &H74, &H22, &HE7, &HAD, &H35, &H85, &HE2, &HF9, &H37, &HE8, &H1C, &H75, &HDF, &H6E, _
  199.         &H47, &HF1, &H1A, &H71, &H1D, &H29, &HC5, &H89, &H6F, &HB7, &H62, &HE, &HAA, &H18, &HBE, &H1B, _
  200.         &HFC, &H56, &H3E, &H4B, &HC6, &HD2, &H79, &H20, &H9A, &HDB, &HC0, &HFE, &H78, &HCD, &H5A, &HF4, _
  201.         &H1F, &HDD, &HA8, &H33, &H88, &H7, &HC7, &H31, &HB1, &H12, &H10, &H59, &H27, &H80, &HEC, &H5F, _
  202.         &H60, &H51, &H7F, &HA9, &H19, &HB5, &H4A, &HD, &H2D, &HE5, &H7A, &H9F, &H93, &HC9, &H9C, &HEF, _
  203.         &HA0, &HE0, &H3B, &H4D, &HAE, &H2A, &HF5, &HB0, &HC8, &HEB, &HBB, &H3C, &H83, &H53, &H99, &H61, _
  204.         &H17, &H2B, &H4, &H7E, &HBA, &H77, &HD6, &H26, &HE1, &H69, &H14, &H63, &H55, &H21, &HC, &H7D)
  205.  
  206.     rcon = Array( _
  207.         &H8D, &H1, &H2, &H4, &H8, &H10, &H20, &H40, &H80, &H1B, &H36, &H6C, &HD8, &HAB, &H4D, &H9A, _
  208.         &H2F, &H5E, &HBC, &H63, &HC6, &H97, &H35, &H6A, &HD4, &HB3, &H7D, &HFA, &HEF, &HC5, &H91, &H39, _
  209.         &H72, &HE4, &HD3, &HBD, &H61, &HC2, &H9F, &H25, &H4A, &H94, &H33, &H66, &HCC, &H83, &H1D, &H3A, _
  210.         &H74, &HE8, &HCB, &H8D, &H1, &H2, &H4, &H8, &H10, &H20, &H40, &H80, &H1B, &H36, &H6C, &HD8, _
  211.         &HAB, &H4D, &H9A, &H2F, &H5E, &HBC, &H63, &HC6, &H97, &H35, &H6A, &HD4, &HB3, &H7D, &HFA, &HEF, _
  212.         &HC5, &H91, &H39, &H72, &HE4, &HD3, &HBD, &H61, &HC2, &H9F, &H25, &H4A, &H94, &H33, &H66, &HCC, _
  213.         &H83, &H1D, &H3A, &H74, &HE8, &HCB, &H8D, &H1, &H2, &H4, &H8, &H10, &H20, &H40, &H80, &H1B, _
  214.         &H36, &H6C, &HD8, &HAB, &H4D, &H9A, &H2F, &H5E, &HBC, &H63, &HC6, &H97, &H35, &H6A, &HD4, &HB3, _
  215.         &H7D, &HFA, &HEF, &HC5, &H91, &H39, &H72, &HE4, &HD3, &HBD, &H61, &HC2, &H9F, &H25, &H4A, &H94, _
  216.         &H33, &H66, &HCC, &H83, &H1D, &H3A, &H74, &HE8, &HCB, &H8D, &H1, &H2, &H4, &H8, &H10, &H20, _
  217.         &H40, &H80, &H1B, &H36, &H6C, &HD8, &HAB, &H4D, &H9A, &H2F, &H5E, &HBC, &H63, &HC6, &H97, &H35, _
  218.         &H6A, &HD4, &HB3, &H7D, &HFA, &HEF, &HC5, &H91, &H39, &H72, &HE4, &HD3, &HBD, &H61, &HC2, &H9F, _
  219.         &H25, &H4A, &H94, &H33, &H66, &HCC, &H83, &H1D, &H3A, &H74, &HE8, &HCB, &H8D, &H1, &H2, &H4, _
  220.         &H8, &H10, &H20, &H40, &H80, &H1B, &H36, &H6C, &HD8, &HAB, &H4D, &H9A, &H2F, &H5E, &HBC, &H63, _
  221.         &HC6, &H97, &H35, &H6A, &HD4, &HB3, &H7D, &HFA, &HEF, &HC5, &H91, &H39, &H72, &HE4, &HD3, &HBD, _
  222.         &H61, &HC2, &H9F, &H25, &H4A, &H94, &H33, &H66, &HCC, &H83, &H1D, &H3A, &H74, &HE8, &HCB)
  223.  
  224.     'Dim expandedKey, block(16) As Double, aesKey(32) As Double, i As Integer, j As Integer
  225.     Dim expandedKey, block(16) As Double, aesKey(16) As Double, i As Integer, j As Integer
  226.     Dim isDone As Boolean
  227.     Dim sCipher, sTemp, sTemp1, nOnce(16), priorCipher(16)
  228.     Dim x As Integer, r As Integer, y As Integer, temp(4), intTemp
  229.  
  230.     'remove string spaces
  231.     sTemp = Replace(snOnce, " ", "")
  232.     'assign Hex-strings to byte arrays
  233.     'ReDim nOnce(0 To Len(sTemp) / 2 - 1) As Byte
  234.     'load arrays
  235.     For i = 0 To UBound(nOnce)
  236.         nOnce(i) = Application.WorksheetFunction.Hex2Dec(Mid(sTemp, i * 2 + 1, 2))
  237.     Next i
  238.  
  239.     'remove string spaces
  240.     sTemp = Replace(sPass, " ", "")
  241.     'assign Hex-strings to byte arrays
  242.     'ReDim nOnce(0 To Len(sTemp) / 2 - 1) As Byte
  243.     'load Key in array
  244.     For i = 0 To UBound(aesKey)
  245.         aesKey(i) = Application.WorksheetFunction.Hex2Dec(Mid(sTemp, i * 2 + 1, 2))
  246.     Next i
  247.  
  248.     expandedKey = expandKey(aesKey, sbox, rcon)
  249.     j = 0
  250.     isDone = False
  251.  
  252.     'remove string spaces
  253.     sTemp1 = Replace(sPlain, " ", "")
  254.     Do Until isDone
  255.         sTemp = Mid(sTemp1, j * 32 + 1, 32)
  256.         'padding last 16 bytes with 00
  257.         If Len(sTemp) < 32 Then
  258.             For i = Len(sTemp) To 31
  259.                 sTemp = sTemp & Chr(0)
  260.             Next
  261.         End If
  262.         'load cyphertext in array
  263.         For i = 0 To 15
  264.             block(i) = Application.WorksheetFunction.Hex2Dec(Mid(sTemp, i * 2 + 1, 2))
  265.         Next
  266.         'check all cyphertext is done
  267.         If (j + 1) * 32 >= Len(sTemp1) Then
  268.             isDone = True
  269.         End If
  270.  
  271.         j = j + 1
  272.  
  273.         If toCrypt Then
  274.             r = 0
  275.             For i = 0 To 15
  276.                 block(i) = block(i) Xor nOnce(i) Xor expandedKey((i Mod 4) * 4 + (i \ 4))
  277.             Next
  278.  
  279.             For x = 1 To 13
  280.                 block(0) = sbox(block(0))
  281.                 block(1) = sbox(block(1))
  282.                 block(2) = sbox(block(2))
  283.                 block(3) = sbox(block(3))
  284.  
  285.                 intTemp = sbox(block(4))
  286.                 block(4) = sbox(block(5))
  287.                 block(5) = sbox(block(6))
  288.                 block(6) = sbox(block(7))
  289.                 block(7) = intTemp
  290.  
  291.                 intTemp = sbox(block(8))
  292.                 block(8) = sbox(block(10))
  293.                 block(10) = intTemp
  294.                 intTemp = sbox(block(9))
  295.                 block(9) = sbox(block(11))
  296.                 block(11) = intTemp
  297.  
  298.                 intTemp = sbox(block(12))
  299.                 block(12) = sbox(block(15))
  300.                 block(15) = sbox(block(14))
  301.                 block(14) = sbox(block(13))
  302.                 block(13) = intTemp
  303.  
  304.                 r = x * 16
  305.                 For i = 0 To 3
  306.                     temp(0) = block(i)
  307.                     temp(1) = block(i + 4)
  308.                     temp(2) = block(i + 8)
  309.                     temp(3) = block(i + 12)
  310.  
  311.                     block(i) = g2(temp(0)) Xor temp(3) Xor temp(2) Xor g3(temp(1)) Xor expandedKey(r + i * 4)
  312.                     block(i + 4) = g2(temp(1)) Xor temp(0) Xor temp(3) Xor g3(temp(2)) Xor expandedKey(r + i * 4 + 1)
  313.                     block(i + 8) = g2(temp(2)) Xor temp(1) Xor temp(0) Xor g3(temp(3)) Xor expandedKey(r + i * 4 + 2)
  314.                     block(i + 12) = g2(temp(3)) Xor temp(2) Xor temp(1) Xor g3(temp(0)) Xor expandedKey(r + i * 4 + 3)
  315.                 Next
  316.             Next
  317.  
  318.             block(0) = sbox(block(0)) Xor expandedKey(224)
  319.             block(1) = sbox(block(1)) Xor expandedKey(228)
  320.             block(2) = sbox(block(2)) Xor expandedKey(232)
  321.             block(3) = sbox(block(3)) Xor expandedKey(236)
  322.  
  323.             intTemp = sbox(block(4)) Xor expandedKey(237)
  324.             block(4) = sbox(block(5)) Xor expandedKey(225)
  325.             block(5) = sbox(block(6)) Xor expandedKey(229)
  326.             block(6) = sbox(block(7)) Xor expandedKey(233)
  327.             block(7) = intTemp
  328.  
  329.             intTemp = sbox(block(8)) Xor expandedKey(234)
  330.             block(8) = sbox(block(10)) Xor expandedKey(226)
  331.             block(10) = intTemp
  332.             intTemp = sbox(block(9)) Xor expandedKey(238)
  333.             block(9) = sbox(block(11)) Xor expandedKey(230)
  334.             block(11) = intTemp
  335.  
  336.             intTemp = sbox(block(12)) Xor expandedKey(231)
  337.             block(12) = sbox(block(15)) Xor expandedKey(227)
  338.             block(15) = sbox(block(14)) Xor expandedKey(239)
  339.             block(14) = sbox(block(13)) Xor expandedKey(235)
  340.             block(13) = intTemp
  341.  
  342.             For i = 0 To 15
  343.                 nOnce(i) = block(i)
  344.             Next
  345.         Else
  346.             For i = 0 To 15
  347.                 priorCipher(i) = block(i)
  348.             Next
  349.  
  350.             block(0) = sboxinv(block(0) Xor expandedKey(224))
  351.             block(1) = sboxinv(block(1) Xor expandedKey(228))
  352.             block(2) = sboxinv(block(2) Xor expandedKey(232))
  353.             block(3) = sboxinv(block(3) Xor expandedKey(236))
  354.  
  355.             intTemp = sboxinv(block(4) Xor expandedKey(225))
  356.             block(4) = sboxinv(block(7) Xor expandedKey(237))
  357.             block(7) = sboxinv(block(6) Xor expandedKey(233))
  358.             block(6) = sboxinv(block(5) Xor expandedKey(229))
  359.             block(5) = intTemp
  360.  
  361.             intTemp = sboxinv(block(8) Xor expandedKey(226))
  362.             block(8) = sboxinv(block(10) Xor expandedKey(234))
  363.             block(10) = intTemp
  364.             intTemp = sboxinv(block(9) Xor expandedKey(230))
  365.             block(9) = sboxinv(block(11) Xor expandedKey(238))
  366.             block(11) = intTemp
  367.  
  368.             intTemp = sboxinv(block(12) Xor expandedKey(227))
  369.             block(12) = sboxinv(block(13) Xor expandedKey(231))
  370.             block(13) = sboxinv(block(14) Xor expandedKey(235))
  371.             block(14) = sboxinv(block(15) Xor expandedKey(239))
  372.             block(15) = intTemp
  373.  
  374.             For x = 13 To 1 Step -1
  375.                 r = x * 16
  376.  
  377.                 For i = 0 To 3
  378.                     temp(0) = block(i) Xor expandedKey(r + i * 4)
  379.                     temp(1) = block(i + 4) Xor expandedKey(r + i * 4 + 1)
  380.                     temp(2) = block(i + 8) Xor expandedKey(r + i * 4 + 2)
  381.                     temp(3) = block(i + 12) Xor expandedKey(r + i * 4 + 3)
  382.  
  383.                     block(i) = g14(temp(0)) Xor g9(temp(3)) Xor g13(temp(2)) Xor g11(temp(1))
  384.                     block(i + 4) = g14(temp(1)) Xor g9(temp(0)) Xor g13(temp(3)) Xor g11(temp(2))
  385.                     block(i + 8) = g14(temp(2)) Xor g9(temp(1)) Xor g13(temp(0)) Xor g11(temp(3))
  386.                     block(i + 12) = g14(temp(3)) Xor g9(temp(2)) Xor g13(temp(1)) Xor g11(temp(0))
  387.                 Next
  388.  
  389.                 block(0) = sboxinv(block(0))
  390.                 block(1) = sboxinv(block(1))
  391.                 block(2) = sboxinv(block(2))
  392.                 block(3) = sboxinv(block(3))
  393.  
  394.                 intTemp = sboxinv(block(4))
  395.                 block(4) = sboxinv(block(7))
  396.                 block(7) = sboxinv(block(6))
  397.                 block(6) = sboxinv(block(5))
  398.                 block(5) = intTemp
  399.  
  400.                 intTemp = sboxinv(block(8))
  401.                 block(8) = sboxinv(block(10))
  402.                 block(10) = intTemp
  403.                 intTemp = sboxinv(block(9))
  404.                 block(9) = sboxinv(block(11))
  405.                 block(11) = intTemp
  406.  
  407.                 intTemp = sboxinv(block(12))
  408.                 block(12) = sboxinv(block(13))
  409.                 block(13) = sboxinv(block(14))
  410.                 block(14) = sboxinv(block(15))
  411.                 block(15) = intTemp
  412.             Next
  413.  
  414.             r = 0
  415.             For i = 0 To 15
  416.                 block(i) = block(i) Xor expandedKey((i Mod 4) * 4 + (i \ 4)) Xor nOnce(i)
  417.                 nOnce(i) = priorCipher(i)
  418.             Next
  419.         End If
  420.  
  421.         For i = 0 To 15
  422.             sCipher = sCipher & Application.WorksheetFunction.Dec2Hex(block(i), 2)
  423.         Next
  424.     Loop
  425.     'return cyphertext Crypt/Decrypt
  426.     stringAES = sCipher
  427. End Function
  428.  
1 Week Ago #3

Rabbit
Expert Mod 10K+
P: 12,374
Rather than converting everything to use hex representation, it would be easier if you converted your hex representation to its ASCII string equivalence so you just need to do the translation at the beginning and the end.
1 Week Ago #4

Post your reply

Sign in to post your reply or Sign up for a free account.