473,324 Members | 2,268 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,324 software developers and data experts.

AES Question - VBA/Excel

>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
3 2407
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
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.  
Dec 1 '19 #3
Rabbit
12,516 Expert Mod 8TB
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.
Dec 2 '19 #4

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

Similar topics

13
by: Allison Bailey | last post by:
Hi Folks, I'm a brand new Python programmer, so please point me in the right direction if this is not the best forum for this question.... I would like to open an existing MS Excel spreadsheet...
3
by: Otie | last post by:
I found the following under the GetObject help notes and in the example for GetObject: "This example uses the GetObject function to get a reference to a specific Microsoft Excel worksheet...
6
by: Matthew Wieder | last post by:
I have the following requirements: Build a stand-alone C# application that asks the user to click in a cell in an Excel spreadsheet, and then displays the address of that cell in the C#...
14
by: pmud | last post by:
Hi, I need to use an Excel Sheet in ASP.NET application so that the users can enter (copy, paste ) large number of rows in this Excel Sheet. Also, Whatever the USER ENETRS needs to go to the...
22
by: Howard Kaikow | last post by:
There's a significant problem in automating Excel from VB .NET. Reminds me of a problem I encountered almost 3 years ago that was caused by the Norton Auntie Virus Office plug-in. Can anybody...
9
by: Anthony | last post by:
To me, creating Excel 2003 spreadsheets programmatically via VB.NET hasn't really changed since the days of VB6. That is, I'd do something similar to this Code: Dim ExcelApp As...
7
by: Alain \Mbuna\ | last post by:
Hi everybody. In my program I have some data that is calculated after some input from the user. I have written some code that opens an Excel workbook, with 5 worksheets and the calculated data...
16
by: alexia.bee | last post by:
Hi all, In some weird reason, excel instance won;t die if i remove the comment from 4 lines of setting values into struct. here is a snipcode public...
9
by: Doug Glancy | last post by:
I got the following code from Francesco Balena's site, for disposing of Com objects: Sub SetNothing(Of T)(ByRef obj As T) ' Dispose of the object if possible If obj IsNot Nothing AndAlso...
0
by: DolphinDB | last post by:
Tired of spending countless mintues downsampling your data? Look no further! In this article, you’ll learn how to efficiently downsample 6.48 billion high-frequency records to 61 million...
0
by: ryjfgjl | last post by:
ExcelToDatabase: batch import excel into database automatically...
0
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, we are pleased to welcome back...
1
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, we are pleased to welcome back...
0
by: Vimpel783 | last post by:
Hello! Guys, I found this code on the Internet, but I need to modify it a little. It works well, the problem is this: Data is sent from only one cell, in this case B5, but it is necessary that data...
0
by: jfyes | last post by:
As a hardware engineer, after seeing that CEIWEI recently released a new tool for Modbus RTU Over TCP/UDP filtering and monitoring, I actively went to its official website to take a look. It turned...
1
by: PapaRatzi | last post by:
Hello, I am teaching myself MS Access forms design and Visual Basic. I've created a table to capture a list of Top 30 singles and forms to capture new entries. The final step is a form (unbound)...
0
by: af34tf | last post by:
Hi Guys, I have a domain whose name is BytesLimited.com, and I want to sell it. Does anyone know about platforms that allow me to list my domain in auction for free. Thank you
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 3 Apr 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome former...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.