Encoding Base64使用Stream_StringToBinary编码插入新行,是否中断字符串?

Encoding Base64使用Stream_StringToBinary编码插入新行,是否中断字符串?,encoding,vbscript,base64,Encoding,Vbscript,Base64,也许我疯了,但看起来在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 =

也许我疯了,但看起来在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")
'----------------------------------------------------------------------    
结果:

qvzfullmt05hvnfuk5btuviruxmt1rrteymzpbvkvwuxptkdqvntv09srfdiwufsrvlp
VVnpte9or1JfquxMwufotk9zmitz
看起来这种情况发生在很长的UID/PWD对上


有人遇到过这种情况吗?

这是因为Base64编码处理长字符串的方式


编码后的输出流必须以行表示 每个字符不超过76个。所有换行符或其他字符均不可用 解码软件必须忽略表1中的内容。在base64中 数据、表1以外的字符、换行符和其他 空白可能表示传输错误,而 警告消息或甚至拒绝消息可能是合适的 在某些情况下

因为它是在编码后添加
vbLf
Chr(10)
)意味着您可以使用

strEnc = Replace(strEnc, vbLf, "")

有些语言有一个“no wrapping”参数,可以通过它来停止在第76个字符后添加换行符,但我不知道在Microsoft XMLDOM实现中有这样一个参数,这里指出,它看起来像是建议的,但没有证据表明它曾经被实现过。

。我不明白为什么微软会在73号插入一个中断。我花了相当长的时间在SSL上的基本身份验证失败上,却发现了使其成为字符串的特殊字符。@access\u承认这是一个奇怪的字符,老实说,我猜他们不想超过76个字符的最大值,所以决定将其改为72个字符。Base64编码不限制行长度。76个字符的限制和您引用的RFC属于MIME。相反,必须引用,特别是。另一方面,72字限制是打字机时代遗留下来的一项历史性实践。有趣的是,您可以检查这些RFC文件中的最大行长。@access\u MSXML的
bin.base64
是一种MIME编码样式。因此,这是一种预期行为(72或76无关紧要),替换
vbLf
s就行了。我认为你应该把答案记为已接受。