65.9K
CodeProject 正在变化。 阅读更多。
Home

Base64 解码器和编码器

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.03/5 (18投票s)

2007年4月19日

CPOL

2分钟阅读

viewsIcon

196246

downloadIcon

6183

用于编码和解码 Base64 数据的示例代码。

Screenshot - screenshot.gif

引言

我开始对 Base64 解码感兴趣,是因为我收到了一封经过重新格式化的电子邮件,其中的附件仅显示为 Base64 字符串。

作为一个非常好奇的人,我想知道文件附件包含什么。我绝不是一个专业的程序员,但我认为尝试转换这些数据会是一次冒险。我在这个网站上找到了 示例代码(用 C# 编写),用于在 Base64 之间转换字符串。由于图像的 Base64 字符串太长,我修改了代码以从文件中读取字符串,并将转换后的字符串写入文件。这完全不起作用,因为某些字符没有正确转换。它可以转换简单的字符串,但无法处理过于复杂的字符串。

我在网上进一步搜索,发现有很多产品可以为你完成所有这些操作——但需要付费。我意识到我可能需要自己完成这项工作。我快速查看了 Framework 2.0 的内部结构,令我惊喜的是,微软的优秀团队已经为我完成了所有艰苦的工作。我只需要编写几行代码,它就能像梦一样运行。这没什么花哨的,但它能完成它应该做的事情:编码到 Base64 和从 Base64 解码。

Using the Code

此代码中使用的基本方法是 System.Convert.ToBase64String(编码)和 System.Convert.FromBase64String(解码)。

我们从一个 Base64 编码的图像开始——可能有人想让你倒霉。为了你的乐趣,我编码了一个简单的图像文件(该文件也在源代码中提供,标题为 - 恰如其分 - encoded.txt)。

R0lGODlhkAGQAYAAAAAAAP///yH5BAAAAAAALAAAAACQAZABAAL/
jI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si8YhMKpfMpvMJjUqn1Kr1is
1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFhoeIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+
QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+
Tl5ufo6err7O3u7+Dh8vP09fb3+Pn6+/z9/v/w8woMCBBAsaPIgwocKFDBs6fAgxosSJFCtavIgxo8aN/
xw7evwIMqTIkSRLmjyJMqXKlSxbunwJM6bMmTRr2ryJM6fOnTx7+vwJNKjQoUSLGj2KNKnSpXMAOH0KNarUqVSrWr2
KNavWrVMrcv0KNqzYsVy9kj2LNq1aqWbXun0L92rbuHTrup1rN69esHj3+v1LtS/gwYAFEz6c1zDixXAVM36c1jHky
WIlU7681TLmzVY1c/4c1TPo0aJHfy5tejPq1JdXs57s+vXj2LIX0659+Dbuwbp3/+3tey/w4IkpEk89/Djd5MobG29
++jl01dKnt65uHTb27LO3c7ft/Xvu8OJ5ky//+zx64erXF5/oHjz8+OPn0zdv/376/PrZ8//v/55EAO4n4ID+FWhgg
BElqBdzDHbV3oNkOSghVBRW6NSFGGpYIYcSevggiAyKmCCJBpo4IIoAqtgfi/q5eB+M9MkYH43u2bgejujpWB6P4vn
4HZDcCZkdkdYZOR2S0CnZHJPKOXkclMRJGRyVvlm5G5a4aVkbl7J5+RqYrImJXIQY8mXmmWWlqaZWZJr2JmlstolVn
KDZGd1/dI6FJ2d9UqfnnmH9iRmh1wUq6FeGUraodogmmtmckLIl6aQWVmpphphm2ihknXb3aKadbWrpp4yZKh+Coq4
Z6qoQtupqaKROiipitdbHVK667sprr77+Cmywwg5LbLHGHotsssqaLstss84+C2200k5LbbXWXottttpuy2233n4Lb
rjijktuueaei2666q7LbrvuvgtvvPLOS2+99t6Lb7767stvv/7+C3DAAg9McMEGH4xwwgovzHDDDj8MccQST0xxxRZ
fjHHGGm/McccefwxyyCKPTHLJJp+Mcsoqr8xyyy6/DHPMMs9Mc80234xzzjrvzHPPPv8MdNBCD11FAQA7AAAAAA==

你好奇的本性现在想知道图片包含什么。为此,你可以使用这段简单的代码

Public Class Form1

    Sub DecodeFile(ByVal srcFile As String, ByVal destFile As String)
        Dim src As String
        Dim sr As New IO.StreamReader(srcFile)

        src = sr.ReadToEnd

        sr.Close()

        Dim bt64 As Byte() = System.Convert.FromBase64String(src)

        If IO.File.Exists(destFile) Then
            IO.File.Delete(destFile)
        End If

        Dim sw As New IO.FileStream(destFile, IO.FileMode.Create)

        sw.Write(bt64, 0, bt64.Length)

        sw.Close()

    End Sub

    Sub EncodeFile(ByVal srcFile As String, ByVal destfile As String)
        Dim srcBT As Byte()
        Dim dest As String

        Dim sr As New IO.FileStream(srcFile, IO.FileMode.Open)

        ReDim srcBT(sr.Length)

        sr.Read(srcBT, 0, sr.Length)


        sr.Close()

        dest = System.Convert.ToBase64String(srcBT)

        Dim sw As New IO.StreamWriter(destfile, False)

        sw.Write(dest)

        sw.Close()

    End Sub

    Private Sub butBrowseDec_Click(ByVal sender As System.Object, _
	ByVal e As System.EventArgs) Handles butBrowseDec.Click
        Me.SaveFileDialog1.ShowDialog()

        Me.txtDecoded.Text = Me.SaveFileDialog1.FileName

    End Sub

    Private Sub butBrowse_Click(ByVal sender As System.Object, _
	ByVal e As System.EventArgs) Handles butBrowse.Click
        Me.SaveFileDialog1.ShowDialog()

        Me.txtEncoded.Text = Me.SaveFileDialog1.FileName
    End Sub

    Private Sub butEndcode_Click(ByVal sender As System.Object, _
	ByVal e As System.EventArgs) Handles butEndcode.Click
        Try
            If Me.txtDecoded.Text = Nothing Or Me.txtEncoded.Text = Nothing Then
                MsgBox("Please select source and destination files!")
                Exit Sub
            End If

            Me.EncodeFile(Me.txtDecoded.Text, Me.txtEncoded.Text)

            MsgBox("Conversion complete!")

        Catch ex As Exception
            MsgBox(ex.ToString)

        End Try

    End Sub

    Private Sub butDecode_Click(ByVal sender As System.Object, _
	ByVal e As System.EventArgs) Handles butDecode.Click
        Try
            If Me.txtDecoded.Text = Nothing Or Me.txtEncoded.Text = Nothing Then
                MsgBox("Please select source and destination files!")
                Exit Sub
            End If

            Me.DecodeFile(Me.txtEncoded.Text, Me.txtDecoded.Text)

            MsgBox("Conversion complete!")

        Catch ex As Exception
            MsgBox(ex.ToString)

        End Try

    End Sub
End Class

如上所示,我不需要编写任何花哨的东西——框架已经包含了所有巧妙的东西。你只需要正确地布局它。使用提供的代码,你可以轻松地使用提供的文本框编码和解码简单的字符串,但当涉及到文件时——即使是包含的编码字符串——它也无法在解码框中显示结果。因此,我需要包含文件处理功能。

为了确保你的应用程序正常工作

  1. 将加密的字符串复制到文本文件并保存
  2. 运行应用程序,并在“编码”文件位置文本框中选择文件
  3. 在“解码”文件位置框中输入文件名,并添加“.gif”扩展名

单击文件位置文本框之间的“解码”按钮。如果你可以打开图像文件,则表示你已成功将 Base64 字符串转换为图像文件。

Base64 解码器和编码器 - CodeProject - 代码之家
© . All rights reserved.