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研究】生成随机密码
---------------------

【VBA研究】如何用Base64 编解码方法实现简单的加解密的更多相关文章

  1. 使用python3的base64编解码实现字符串的简易加密解密

    import base64 copyright = 'Copyright (c) 2012 Doucube Inc. All rights reserved.' def main(): #转成byte ...

  2. python3的base64编解码

    使用python3的base64编解码实现字符串的简易加密解密 引言: 在一些项目中,接口的报文是通过base64加密传输的,所以在进行接口自动化时,需要对所传的参数进行base64编码,对拿到的响应 ...

  3. ios Base64编解码工具类及使用

    为了避免明码传递http内容,可以用base64编码后传输,收到方再解码,也方便了2进制数据的字符串式传输. 对于ios来说,google给提供了一个很好的工具类,方便进行base64编解码,当然也可 ...

  4. python rsa 加密解密 (编解码,base64编解码)

    最近有需求,需要研究一下RSA加密解密安全:在网上百度了一下例子文章,很少有文章介绍怎么保存.传输.打印加密后的文本信息,都是千篇一律的.直接在一个脚本,加密后的文本信息赋于变量,然后立马调用解密.仔 ...

  5. C#字符串Base64编解码

    C#字符串Base64编解码 首先讲一下什么是Base64编码所谓Base64就是一种基于64个可打印字符来表示二进制数据的方法.Base64编码是从二进制到字符的过程,常用于在网络上传输不可见字符( ...

  6. Delphi Base64 编解码函数

    Delphi 自带 Base64 编解码的单元, EncdDecd这个单元提供两套四个公开函数: 对流的编解码:procedure EncodeStream(Input, Output: TStrea ...

  7. Java实现BASE64编解码

    Java实现BASE64编解码 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs BASE64和其它类似的编码算法通经常使用于转换二进制数据为文本数据,其目 ...

  8. Delphi 自带的 Base64 编解码函数

    今天帮别人解决一个关于 Base64 编解码的问题,竟然发现 Delphi 自带了 Base64 编解码的单元,叫 EncdDecd,这名字很拗口而且不直观,估计这是一直很少人关注和知道的原因. 这个 ...

  9. openssl命令行Base64编解码

    openssl对base64编解码的规范支持较差,用它编解码的结果别的语言如php处理很不方便,注意的几点整理如下 1,如果php加密结果做base64编码长度小于64,则需要添加一个换行符opens ...

随机推荐

  1. 使用linux内核hrtimer高精度定时器实现GPIO口模拟PWM,【原创】

    关键词:Android  linux hrtimer 蜂鸣器  等待队列 信号量 字符设备 平台信息:内核:linux3.4.39 系统:android/android5.1平台:S5P4418  作 ...

  2. Masonry remake更新约束

    前言 说到iOS自动布局,有很多的解决办法.有的人使用xib/storyboard自动布局,也有人使用frame来适配.对于前者,笔者并不喜欢,也不支持.对于后者,更是麻烦,到处计算高度.宽度等,千万 ...

  3. 【繁琐工作自动化】pandas 处理 excel 文件

    0. 一般处理 读取 excel 格式文件:df = pd.read_excel('xx.xlsx'),下面是一些简单查看文件内容的函数: df.head():展示前五行: df.columns:展示 ...

  4. BZOJ1854:游戏(二分图匹配)

    lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备最多只能使 ...

  5. vue 随笔 vue 的属性和方法

    新建的项目中main.js是项目的入口文件 npm run dev 运行文件 npm run bulid  编译 属性与方法 每个Vue实例都会代理其 data 对象里所有的属性: var data= ...

  6. 《C-RNN-GAN: Continuous recurrent neural networks with adversarial training》论文笔记

    出处:arXiv: Artificial Intelligence, 2016(一年了还没中吗?) Motivation 使用GAN+RNN来处理continuous sequential data, ...

  7. log4j没有作用,druid的日志信息还打印在控制台的解决办法

    log4j没有实现类,需引入slf4j实现

  8. Flutter开发移动端APP的入门教程及简单介绍

    Dart&Flutter环境搭建 安装 dart SDK 如果只开发移动应用,那么您不需要Dart SDK; 只需安装Flutter. 这里就直接安装 Flutter (dart SDK已经集 ...

  9. UTF-8格式的文本文件程序读取异常

    最近在windows服务器上直接创建并手打输入配置参数,比如设置概率0.6,然后用java程序打开读取该参数,在本地linux环境下测试完全正常,但是一放到服务器上,就报NotNumber错误,查看了 ...

  10. spring进行事务管理

    一:spring使用注解的方式进行事务声明 1.spring的声明式事务: 用jdbc的事务管理器:DataSourceTransactionManager 首先在applicationContext ...