acc*_*ted 6 vbscript base64 encoding
也许我疯了,但看起来在 VB 中运行 Base64 的著名代码在第 73 个位置插入了一个换行符 (ascii 10),这随后使编码的字符串对于基本身份验证或其他任何与此相关的内容无效。
原始代码:
Function Stream_StringToBinary(Text)
Const adTypeText = 2
Const adTypeBinary = 1
'Create Stream object
Dim BinaryStream 'As New Stream
Set BinaryStream = CreateObject("ADODB.Stream")
'Specify stream type - we want To save text/string data.
BinaryStream.Type = adTypeText
'Specify charset For the source text (unicode) data.
BinaryStream.CharSet = "us-ascii"
'Open the stream And write text/string data To the object
BinaryStream.Open
BinaryStream.WriteText Text
'Change stream type To binary
BinaryStream.Position = 0
BinaryStream.Type = adTypeBinary
'Ignore first two bytes - sign of
BinaryStream.Position = 0
'Open the stream And get binary data from the object
Stream_StringToBinary = BinaryStream.Read
Set BinaryStream = Nothing
End Function
Function Base64Encode(sText)
Dim oXML, oNode
Set oXML = CreateObject("Msxml2.DOMDocument.3.0")
Set oNode = oXML.CreateElement("base64")
oNode.dataType = "bin.base64"
oNode.nodeTypedValue =Stream_StringToBinary(sText)
Base64Encode = oNode.text
Set oNode = Nothing
Set oXML = Nothing
End Function
'------------------- and here goes the encoding -----------------------
strEnc = Base64Encode( "AVERYLONGUSERNAMEHELLOTHE123:AVERYLONGPASSWORDWHYAREYOUSOLONGREALLYANNOY123")
'----------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
结果:
Function Stream_StringToBinary(Text)
Const adTypeText = 2
Const adTypeBinary = 1
'Create Stream object
Dim BinaryStream 'As New Stream
Set BinaryStream = CreateObject("ADODB.Stream")
'Specify stream type - we want To save text/string data.
BinaryStream.Type = adTypeText
'Specify charset For the source text (unicode) data.
BinaryStream.CharSet = "us-ascii"
'Open the stream And write text/string data To the object
BinaryStream.Open
BinaryStream.WriteText Text
'Change stream type To binary
BinaryStream.Position = 0
BinaryStream.Type = adTypeBinary
'Ignore first two bytes - sign of
BinaryStream.Position = 0
'Open the stream And get binary data from the object
Stream_StringToBinary = BinaryStream.Read
Set BinaryStream = Nothing
End Function
Function Base64Encode(sText)
Dim oXML, oNode
Set oXML = CreateObject("Msxml2.DOMDocument.3.0")
Set oNode = oXML.CreateElement("base64")
oNode.dataType = "bin.base64"
oNode.nodeTypedValue =Stream_StringToBinary(sText)
Base64Encode = oNode.text
Set oNode = Nothing
Set oXML = Nothing
End Function
'------------------- and here goes the encoding -----------------------
strEnc = Base64Encode( "AVERYLONGUSERNAMEHELLOTHE123:AVERYLONGPASSWORDWHYAREYOUSOLONGREALLYANNOY123")
'----------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
看起来这种情况发生在很长的 UID/PWD 对上。
有人遇到过这种情况吗?
这是因为 Base64 编码处理长字符串的方式。
来自RFC 2045 - 6.8 Base64 内容传输编码 编码的输出流必须以每行不超过 76 个字符
的形式表示。解码软件必须忽略表 1 中未找到的所有换行符或其他字符。在 Base64 数据中,表 1 中以外的字符、换行符和其他空白可能表示传输错误,在某些情况下可能会出现警告消息甚至消息拒绝。
因为它在编码后添加vbLf ( Chr(10))应该意味着您可以安全地使用以下命令删除它
strEnc = Replace(strEnc, vbLf, "")
Run Code Online (Sandbox Code Playgroud)
某些语言有一个“不换行”参数,可以传递该参数来停止在第 76 个字符之后添加换行符,但我不知道 Microsoft XMLDOM 实现中是否有一个参数,此处指出Base64 ——我们真的想要/需要换行符吗每 76 个字符?看起来好像是有人建议的,但没有证据表明它曾经被实施过。
| 归档时间: |
|
| 查看次数: |
4112 次 |
| 最近记录: |