如何在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
- 注册MSXML:
二、更安全的简易哈希实现(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
相关产品推荐
相关产品推荐

