Возможно, я сумасшедший, но, похоже, знаменитый код для запуска Base64 в VB вставляет символ новой строки (ascii 10) в 73-ю позицию, что впоследствии делает кодированную строку недействительной для базовой проверки подлинности - или что-то еще в этом отношении ,Base64 encode with Stream_StringToBinary вставляет новую строку, разбивая строку?
Оригинальный код:
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-м, хотя. Я потратил довольно много времени на провал Basic Auth over 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-файлах. –