Войти

Показать полную графическую версию : Base64 en\de_code


DarckSol
11-01-2016, 10:03
vbs
Как реализовать?

Iska
11-01-2016, 10:24
Примерно так: vbscript Base64 - Поиск в Google (https://www.google.ru/search?q=vbscript+Base64).

DarckSol
11-01-2016, 11:16
Рабочее решение:
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
11-01-2016, 17:02
Некоторое время назад писал для расширения кругозора пару функций:
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
11-01-2016, 21:08
greg zakharov, «как реализовать» — это не вопрос. Я же не просто отсылаю «в Google», а привожу точный запрос и проверяю его результаты.

greg zakharov
11-01-2016, 21:32
Iska, предпочитаю Google спецификации, дизассемблирование и эксперименты с кодом, словом, простое кодокопательство.




© OSzone.net 2001-2012