也許我很瘋狂,但它看起來像在VB中運行Base64的着名代碼在第73個位置插入一個換行符(ascii 10),隨後使編碼的字符串對基本身份驗證無效 - 或者其他任何事情。使用Stream_StringToBinary進行Base64編碼會插入一個換行符,打破字符串?
原始代碼:
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")
'----------------------------------------------------------------------
結果:
QVZFUllMT05HVVNFUk5BTUVIRUxMT1RIRTEyMzpBVkVSWUxPTkdQQVNTV09SRFdIWUFSRVlP
VVNPTE9OR1JFQUxMWUFOTk9ZMTIz
看起來這發生在很長的UID/PWD對。
有沒有人遇到過這個?
好的。打敗我爲什麼MS在第73位插入休息。我花了相當一段時間,只通過SSL驗證失敗的基本身份驗證來發現將它變成字符串的特殊字符。 –
@access_granted這是一個奇怪的說老實話我猜他們不想超過最多76個字符,所以決定把它削減到72。 – Lankymart
Base64編碼不限制行長度。這76個字符限制和您引用的RFC屬於MIME。必須引用[RFC 4648](https://tools.ietf.org/html/rfc4648),特別是[第3.1節](https://tools.ietf.org/html/rfc4648#section-3.1)。另一方面,72個字符的限制是從打字員時代開始的一種歷史性做法。作爲一個有趣的事實,您可以檢查這些RFC文件中行的最大長度。 –