You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Attachmate Extra! Basic中实现Base64编码或简易哈希?

在Extra! Basic中实现Base64编码与简易哈希的解决方案

一、修正你的Base64编码函数

你提供的代码核心逻辑没问题,但注释掉了返回编码结果的关键语句,这是导致无法输出结果的主要原因。另外需要确认系统默认自带的COM组件可用,以下是修正后的完整可运行函数:

Function EncodeBase64(text$)
    Dim b, domNode
    ' 把字符串转成UTF-8二进制流
    With CreateObject("ADODB.Stream")
        .Open
        .Type = 2 ' 文本模式
        .Charset = "utf-8"
        .WriteText text
        .Position = 0
        .Type = 1 ' 切换为二进制模式读取
        b = .Read
        .Close
    End With
    
    ' 通过XMLDOM节点完成Base64编码
    Set domNode = CreateObject("Microsoft.XMLDOM").createElement("b64")
    domNode.DataType = "bin.base64"
    domNode.nodeTypedValue = b
    ' 提取编码内容,去掉XML节点的多余标记和换行
    EncodeBase64 = Replace(Mid(domNode.text, 5), vbLf, "")
    Set domNode = Nothing
End Function

关键说明:

  • 无需额外引入库,ADODB.Stream(ADO组件)和Microsoft.XMLDOM(MSXML组件)是Windows系统默认预装的。
  • 如果运行时提示对象创建失败,可通过命令行重新注册组件:
    • 注册MSXML:regsvr32.exe msxml3.dll
    • 注册ADO:regsvr32.exe msado15.dll

二、更安全的简易哈希实现(MD5示例)

Base64是可逆编码,仅适合基础混淆,不适合真正的密码存储。如果需要不可逆的密码保护,可使用MD5哈希:

Function GetMD5Hash(text$)
    Dim md5, hashBytes, hexStr, i
    Set md5 = CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider")
    
    ' 将字符串转为UTF-8二进制
    With CreateObject("ADODB.Stream")
        .Open
        .Type = 2
        .Charset = "utf-8"
        .WriteText text
        .Position = 0
        .Type = 1
        hashBytes = md5.ComputeHash_2(.Read)
        .Close
    End With
    
    ' 把二进制哈希转成十六进制字符串
    hexStr = ""
    For i = 1 To LenB(hashBytes)
        hexStr = hexStr & Right("0" & Hex(AscB(MidB(hashBytes, i, 1))), 2)
    Next
    GetMD5Hash = UCase(hexStr)
    Set md5 = Nothing
End Function

使用提示:

  • MD5是不可逆的,存储密码时只存哈希值,验证时将用户输入的密码哈希后与存储值对比即可。
  • 该函数依赖.NET Framework的COM互操作组件,Windows 7及以上系统默认已安装。

三、Extra! Basic环境适配小技巧

  • Extra! Basic是VBScript的子集,支持直接用CreateObject调用系统COM对象,不需要额外声明。
  • 可以加个测试子过程验证功能:
    Sub TestEncoding()
        Dim originalText, b64Result, md5Result
        originalText = "MySecretPassword123"
        b64Result = EncodeBase64(originalText)
        md5Result = GetMD5Hash(originalText)
        MsgBox "Base64编码结果:" & b64Result & vbCrLf & "MD5哈希结果:" & md5Result
    End Sub
    

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 03:30:46