Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码,将数据变成字符串实现文本传输。由于编码简单,所以很容易实现,代码也是现成的。利用这个编码规则可以实现简单的加解密。编解码方法见: VB实现Base64 编解码

我用VBA做了个简单的系统,其中用到用户登录,自然要保存用户名和密码。密码存放在数据库中,不想明码保存,于是就想到用这个编码方法进行加密。Base64编码是按照64个字符字典进行编码的,为了加密,这64个字符可以打乱原来的顺序,也可以用其他字符替换掉部分字符,如果不考虑解码,这个字符字典中的字符甚至可以重复。比如密码保存,只需比较密文,不需要还原成明文进行比较,那么字符字典中重复也是没有问题的,可以任意取64个字符作为字典。

下面这个函数就可以用来生成密码的密文,其中的数据字典是用个随机函数随意生成的:

Function B64Encode(sou_str As String) As String 'Base64 编码

On Error GoTo over '排错

Dim buf() As Byte, length As Long, mods As Long

Dim Str() As Byte, kk As Long, i As Long

'字符字典(用随机产生的)

Const B64_CHAR_DICT = "Qx7mCcL2XsYm!Q^ZjKeLn#r2H4rV6B(Xu$v$zU2@CnHfVf7tH9XrBcB9WyA6F%Ah."

kk = Len(sou_str) - 1

ReDim Str(kk)

For i = 0 To kk

Str(i) = Asc(Mid(sou_str, i + 1, 1))

Next i

mods = (UBound(Str) + 1) Mod 3 '除以3的余数

length = UBound(Str) + 1 - mods

ReDim buf(length / 3 * 4 + IIf(mods <> 0, 4, 0) - 1)

For i = 0 To length - 1 Step 3

buf(i / 3 * 4) = (Str(i) And &HFC) / &H4

buf(i / 3 * 4 + 1) = (Str(i) And &H3) * &H10 + (Str(i + 1) And &HF0) / &H10

buf(i / 3 * 4 + 2) = (Str(i + 1) And &HF) * &H4 + (Str(i + 2) And &HC0) / &H40

buf(i / 3 * 4 + 3) = Str(i + 2) And &H3F

Next

If mods = 1 Then

buf(length / 3 * 4) = (Str(length) And &HFC) / &H4

buf(length / 3 * 4 + 1) = (Str(length) And &H3) * &H10

buf(length / 3 * 4 + 2) = 64

buf(length / 3 * 4 + 3) = 64

ElseIf mods = 2 Then

buf(length / 3 * 4) = (Str(length) And &HFC) / &H4

buf(length / 3 * 4 + 1) = (Str(length) And &H3) * &H10 + (Str(length + 1) And &HF0) / &H10

buf(length / 3 * 4 + 2) = (Str(length + 1) And &HF) * &H4

buf(length / 3 * 4 + 3) = 64

End If

For i = 0 To UBound(buf)

B64Encode = B64Encode + Mid(B64_CHAR_DICT, buf(i) + 1, 1)

Next

over:

End Function

'调用测试

Private Sub ttt()

aa = B64Encode("iamlaosong")

bb = B64Encode("iamlaosong")

MsgBox aa & " " & bb

End Sub

关于随机字符串的产生,见:【VBA研究】生成随机密码

---------------------

base64编码 vba_【VBA研究】如何用Base64 编解码方法实现简单的加解密相关推荐

  1. base64编码_几分钟看懂Base64编码原理

    Base64简介 Base64是基于64个可打印字符(小写字母a-z,大写字母A-Z,数字0-9,符号"+","/" 再加上作为垫字的"=" ...

  2. Python学习教程:Python3内置模块之base64编解码方法小结

    Python学习教程:Python3内置模块之base64编解码方法小结 概述 Base64 是网络上最常见的用于传输 8Bit 字节码的编码方式之一,Base64 就是一种基于 64 个可打印字符来 ...

  3. 图片进行base64编解码方法

    2019独角兽企业重金招聘Python工程师标准>>> package com.vista.test; import java.io.FileInputStream; import ...

  4. 集显也能硬件编码:Intel SDK 各种音视频编解码学习详解

    http://blog.sina.com.cn/s/blog_4155bb1d0100soq9.html INTEL MEDIA SDK是INTEL推出的基于其内建显示核心的编解码技术,我们在播放高清 ...

  5. base64编码 vba_VB VBA ASP 可通用的基于Base64进行加密和解密的函数

    VB VBA ASP 可通用的基于Base64进行加密和解密的函数 可用于Access VBA 以及 Excel VBA对字符串 数据甚至文本文件进行加密和解密,以保证您数据的安全. 先创建一个模块, ...

  6. php解压base64编码,PHP函数分享之解压缩base64压缩文件

    解压缩base64 压缩文件,稍微解释一下,比如你有一个pdf文件,使用软件压缩成了.gz格式的文件,然后再把这个文件做成了basa64 String 传输给某个人,比如这个人就是我,好吧,问题来了, ...

  7. 研究语音和音频编解码的相关大学和链接

    美国圣塔芭芭拉加州大学:(缩写UCSB) http://www.scl.ece.ucsb.edu/html/index.html 瑞典皇家理工学院工程:() http://www.s3.kth.se/ ...

  8. Excel VBA高效办公应用-第十六章-VBA高效文件操作(同时给多个工作簿加解密)

    本示例演示了批量加解密文件操作. Option ExplicitPrivate Sub ComboBox1_Change()'增加列表框的选项 ListBox1.AddItem ComboBox1.T ...

  9. Java中BASE64 编码

    2019独角兽企业重金招聘Python工程师标准>>> BASE64 编码是一种常用的字符编码,在很多地方都会用到.JDK 中提供了非常方便的 BASE64Encoder 和 BAS ...

最新文章

  1. 通过TA binary查看TA的uuid和stack
  2. Java工程师学习步骤
  3. GitHub的DGit改进了平台的可靠性、性能以及可用性
  4. 3.4 改进定向搜索
  5. 球球大作战c语言源代码,球球大作战,源码分享
  6. FastAPI(56)- 使用 Websocket 打造一个迷你聊天室
  7. iPhoneX、iPhoneXS、iPhoneXR、iPhoneXSMax屏幕适配
  8. python使用 photoshop-python-api 调用ps处理批量动作操作
  9. 虚拟机服务器渗透,对一台虚拟主机服务器的渗透 -电脑资料
  10. html带有进度条的登陆,带进度条上传
  11. oracle10g笔记1
  12. 06蚂蚁-高性能Nginx服务器——1.反向代理
  13. Mysql索引类型 normal, unique, full text的区别
  14. 试题 基础练习 字母图形
  15. ReadProcessMemory()
  16. 葫芦娃手游服务器未响应,葫芦娃充值没反应 充值元宝未到账解决办法
  17. 赚钱项目在家可以赚钱,赶紧来看看吧!
  18. 一个程序员转型 AI 工程师的故事
  19. 08年普元软件发展回顾与09年展望
  20. 找参考图的同志们看过来,分享几个建模参考网站给你们。再不用愁啦

热门文章

  1. 百度笔试题--钓鱼比赛
  2. PayPal2019笔试题(Java版)
  3. 虚拟机+虚拟光驱安装linux(整理版)
  4. 将超过5000万行JS代码迁移到TypeScript,我们得到的10大见解
  5. slq clause
  6. IE浏览器跨应用访问失败问题
  7. 抖音,快手,腾讯,三大龙头短视频直播有什么区别差异化
  8. android照片备份软件下载,照片视频备份软件下载-照片视频备份 安卓版v1.0.1-PC6安卓网...
  9. 英文论文写作小贴士(1)
  10. linux c中write、read的用法