VBS/WSH/JS - Base64 en\de_code

Ответить
Аватара пользователя
DarckSol

VBS/WSH/JS - Base64 en\de_code

Сообщение DarckSol »

vbs

Как реализовать?
Аватара пользователя
Iska

Re: VBS/WSH/JS - Base64 en\de_code

Сообщение Iska »

Рабочее решение:



Код:

Код: Выделить всё

Function Base64Decode(ByVal base64String)
  Const Base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
  Dim dataLength, sOut, groupBegin
  base64String = Replace(base64String, vbCrLf, "")
  base64String = Replace(base64String, vbTab, "")
  base64String = Replace(base64String, " ", "")
  dataLength = Len(base64String)
  If dataLength Mod 4  0 Then
    Err.Raise 1, "Base64Decode", "Bad Base64 string."
    Exit Function
  End If
  For groupBegin = 1 To dataLength Step 4
    Dim numDataBytes, CharCounter, thisChar, thisData, nGroup, pOut
    numDataBytes = 3
    nGroup = 0
    For CharCounter = 0 To 3
      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
    nGroup = Hex(nGroup)
    nGroup = String(6 - Len(nGroup), "0") & nGroup
    pOut = Chr(CByte("&H" & Mid(nGroup, 1, 2))) + _
      Chr(CByte("&H" & Mid(nGroup, 3, 2))) + _
      Chr(CByte("&H" & Mid(nGroup, 5, 2)))
    sOut = sOut & Left(pOut, numDataBytes)
  Next
  Base64Decode = sOut
End Function
'Переменная, присвоение значения, вывод в сообщение результата'
dim result
result = Base64Decode("MTIzNDU=")
WScript.Echo(result)
Аватара пользователя
greg zakharov

Re: VBS/WSH/JS - Base64 en\de_code

Сообщение greg zakharov »

Некоторое время назад писал для расширения кругозора пару функций:



Код:

Код: Выделить всё

Function ReadBytes(file)
  Dim objStream : Set objStream = CreateObject("SAPI.SpFileStream")
  Dim objFSO : Set objFSO = CreateObject("Scripting.FileSystemObject")
  Dim objBuff, intLength
  file = objFSO.GetAbsolutePathName(file)
  intLength = objFSO.GetFile(file).Size
  objStream.Open file, 0
  objStream.Read objBuff, intLength
  objStream.Close
  ReadBytes = objBuff
End Function
Function EncodeBase64(bytes)
  Dim objXml : Set objXml = CreateObject("Microsoft.XMLDOM")
  Dim objTmp : Set objTmp = objXml.createElement("tmp")
  objTmp.DataType = "bin.base64"
  objTmp.NodeTypedValue = bytes
  EncodeBase64 = objTmp.Text
End Function

Пример работы:



Код:

Код: Выделить всё

Dim objBytes
objBytes = ReadBytes("C:\src\myfile.txt")
WScript.Echo EncodeBase64(objBytes)

Декодирование осуществляется аналогично кодированию.

Пример из нынешней практики:



Код:

Код: Выделить всё

Dim strBase64, strRegular
Dim objEncoding : Set objEncoding = CreateObject("System.Text.UnicodeEncoding")
Dim objBytes : objBytes = objEncoding.GetBytes_4("Это тестовая строка")
Dim objXml : Set objXml = CreateObject("Microsoft.XMLDOM")
Dim objTmp : Set objTmp = objXml.createElement("tmp")
' кодирование
objTmp.DataType = "bin.base64"
objTmp.NodeTypedValue = objBytes
strBase64 = objTmp.Text
WScript.Echo strBase64
' декодирование
objTmp.Text = strBase64
strRegular = objTmp.NodeTypedValue
WScript.Echo strRegular

Iska, а Google - это не по-кодокапательски.
Аватара пользователя
Iska

Re: VBS/WSH/JS - Base64 en\de_code

Сообщение Iska »

greg zakharov, «как реализовать» — это не вопрос. Я же не просто отсылаю «в Google», а привожу точный запрос и проверяю его результаты.
Аватара пользователя
Iska

Re: VBS/WSH/JS - Base64 en\de_code

Сообщение Iska »

Iska, предпочитаю Google спецификации, дизассемблирование и эксперименты с кодом, словом, простое кодокопательство.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»