Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2017, 00:55   #1
Azz100
Пользователь
 
Регистрация: 16.12.2009
Сообщений: 34
По умолчанию Base64 to Hex

Добрый день! Есть данные в системе Base64:
Код HTML:
fXBb3TAPnikOhWjyZj5TGQ==
iddwzBNHu0EtrCbHagmi4g==
UoHPlzr3IsvNpv0SiWecdA==
V1i3y4o11aTUi+3G7m+g0A==
pB7g39C+MG6k01/X9WUAzw==
9O902z/PJsdMPMW9Y2mJgA==
05lQbBQKwFfqcr4Sz/yk5g==
6HnJ3i4uE89d7OznpFt2MQ==
v+pMPS6Mo7SqjZnAxsx1pA==
UwiYdZK1ktSQgGmVbKpvlA==
plx0eCR5F/NM/oMD9/HbeA==
fvpBd/k3JTHMZLqA8xs2ng==
VwTag2CnRvPYNeHUJ0xaUw==
1aLZf9sKTeGofbm3gy++Dg==
Нужно преобразовать их в Hex представление, соответственно:
Код HTML:
7d705bdd300f9e290e8568f2663e5319
89d770cc1347bb412dac26c76a09a2e2
5281cf973af722cbcda6fd1289679c74
5758b7cb8a35d5a4d48bedc6ee6fa0d0
a41ee0dfd0be306ea4d35fd7f56500cf
f4ef74db3fcf26c74c3cc5bd63698980
d399506c140ac057ea72be12cffca4e6
e879c9de2e2e13cf5decece7a45b7631
bfea4c3d2e8ca3b4aa8d99c0c6cc75a4
5308987592b592d4908069956caa6f94
a65c7478247917f34cfe8303f7f1db78
7efa4177f9372531cc64ba80f31b369e
5704da8360a746f3d835e1d4274c5a53
d5a2d97fdb0a4de1a87db9b7832fbe0e
Как это сделать?
Azz100 вне форума Ответить с цитированием
Старый 17.05.2017, 07:45   #2
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

А каким боком тут эксел?
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 17.05.2017, 11:47   #3
Azz100
Пользователь
 
Регистрация: 16.12.2009
Сообщений: 34
По умолчанию

Цитата:
А каким боком тут эксел?
Хорошо. Задам вопрос так:
Как это сделать с помощью vba?
Azz100 вне форума Ответить с цитированием
Старый 17.05.2017, 11:51   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Тогда вам встречный вопрос: что это ха хекс и как он получается? Очевидно, что не простым переводом, иначе бы последние были одинаковые.
p51x вне форума Ответить с цитированием
Старый 17.05.2017, 11:56   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
иначе бы последние были одинаковые.
не-не.. если Вы про "==" - то это просто концевой элемент, он не декодируется.
(см. например, на вики base64)

Цитата:
Сообщение от Azz100 Посмотреть сообщение
Как это сделать с помощью vba?
вариантов много. начиная от найти готовую библиотеку, или использовать вызов скриптов и заканчивая реализовать алгоритм на VBA с нуля.
А это точно нужно и именно на VBA?
гуглить пробовали?

вот отсюда код пробовали?

Последний раз редактировалось Serge_Bliznykov; 17.05.2017 в 12:03.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.05.2017, 12:08   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

А ему обратное надо, base64 декодировать... мне почему-то показалочь, что наоборот.
p51x вне форума Ответить с цитированием
Старый 17.05.2017, 12:18   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

держите готовый код:
Код:
' Decodes a base-64 encoded string (BSTR type).
' 1999 - 2004 Antonin Foller, http://www.motobit.com
' 1.01 - solves problem with Access And 'Compare Database' (InStr)
Public Function Base64Decode(ByVal base64String)
  'rfc1521
  '1999 Antonin Foller, Motobit Software, http://Motobit.cz
  Const Base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
  Dim dataLength, sOut, groupBegin
  
  'remove white spaces, If any
  base64String = Replace(base64String, vbCrLf, "")
  base64String = Replace(base64String, vbTab, "")
  base64String = Replace(base64String, " ", "")
  
  'The source must consists from groups with Len of 4 chars
  dataLength = Len(base64String)
  If dataLength Mod 4 <> 0 Then
    Err.Raise 1, "Base64Decode", "Bad Base64 string."
    Exit Function
  End If

  
  ' Now decode each group:
  For groupBegin = 1 To dataLength Step 4
    Dim numDataBytes, CharCounter, thisChar, thisData, nGroup, pOut
    ' Each data group encodes up To 3 actual bytes.
    numDataBytes = 3
    nGroup = 0

    For CharCounter = 0 To 3
      ' Convert each character into 6 bits of data, And add it To
      ' an integer For temporary storage.  If a character is a '=', there
      ' is one fewer data byte.  (There can only be a maximum of 2 '=' In
      ' the whole string.)

      thisChar = Mid(base64String, groupBegin + CharCounter, 1)

      If thisChar = "=" Then
        numDataBytes = numDataBytes - 1
        thisData = 0
      Else
        thisData = InStr(1, Base64, thisChar, vbBinaryCompare) - 1
      End If
      If thisData = -1 Then
        Err.Raise 2, "Base64Decode", "Bad character In Base64 string."
        Exit Function
      End If

      nGroup = 64 * nGroup + thisData
    Next
    
    'Hex splits the long To 6 groups with 4 bits
    nGroup = Hex(nGroup)
    
    'Add leading zeros
    nGroup = String(6 - Len(nGroup), "0") & nGroup
    
    sOut = sOut & Left(nGroup, numDataBytes * 2)
    
    'Convert the 3 byte hex integer (6 chars) To 3 characters
    'pOut = Chr(CByte("&H" & Mid(nGroup, 1, 2))) + _
      Chr(CByte("&H" & Mid(nGroup, 3, 2))) + _
      Chr(CByte("&H" & Mid(nGroup, 5, 2)))
      
    
    'add numDataBytes characters To out string
    'sOut = sOut & Left(pOut, numDataBytes)
  Next

  Base64Decode = sOut
End Function
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.05.2017, 14:50   #8
Azz100
Пользователь
 
Регистрация: 16.12.2009
Сообщений: 34
По умолчанию

Serge_Bliznykov, спасибо огромное! Работает как надо. А то, нагуглил одно решение, но оно кривовато работает когда при декодировании base64 появляются управляющие символы ascii.
Azz100 вне форума Ответить с цитированием
Старый 17.05.2017, 15:06   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

пожалуйста.

я выложенный выше код тоже нагуглил, потом чуток подправил (чтобы выдавало hex)
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод текста из Base64 или HEX в формат ASN1 qwq C# (си шарп) 0 19.11.2015 15:36
Ошибка. Берём hex-код, шифруем hex-код, собираем всё в файл. Poltish Общие вопросы Delphi 2 21.08.2013 12:57
file->HEX HEX->BIN kakawkin Общие вопросы Delphi 1 25.04.2012 01:02
base64 beemoto Общие вопросы Delphi 0 24.04.2010 21:58
base64 BlackOmen Общие вопросы Delphi 2 02.05.2008 16:30