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

"Rabbit's" AES Algorithm Works for Max. 16 Chars

P: 3
Hi all.

I am using code (see below) based on Rabbits AES Algorithm (AES Encryption Algorithm for VBA and VBScript). It's not the original code posted by Rabbit, but I liked the fact, that I can en-/decrypt strings with it, rather than files and it was already in VBA. Now what's not working is that if I try to en-/decrypt strings longer than 16 chars it won't work. This the output of the immediate window:
Expand|Select|Wrap|Line Numbers
  1. ? endecryptaes(endecryptaes("a16char-long-str",1,"12345678"),0,"12345678")
  2. a16char-long-str
  3. ? endecryptaes(endecryptaes("a17char-long-str1",1,"12345678"),0,"12345678")
  4. a17char-long-str’ZG`‡"8
As you see the first 16 chars are en- and decrypted correctly, but if I add just one character it's not working anymore.

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


zmbd
Expert Mod 5K+
P: 5,397
lumo
It's not the original code posted by Rabbit,
That's a lot of code to wade through, perhaps you could tell us what modifications you have made to the code and that would give us a starting point.

-Z
Jun 24 '17 #2

P: 3
Hi Z. Thank you for writing. Actually my code was based on your comment and code (the CBC version)! I didn't remember that since I did this over a year ago and never touched the code again. So what I did now was to compare your code and my code and I found a few lines missing after line 286:

Expand|Select|Wrap|Line Numbers
  1. For i = 0 To 15
  2.    priorCipher(i) = block(i)
  3. Next
Maybe I "lost" that 3 lines during my edit, no idea. But now everything is working as it should.

-Luca
Jun 25 '17 #3

zmbd
Expert Mod 5K+
P: 5,397
I am glad you found that, I was just about to start comparing your code to one I have that I know works.
Jun 25 '17 #4

P: 3
Thanks! I'm so happy it's working now!
Jun 25 '17 #5

Post your reply

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