以下内容仅作为 http://topic.csdn.net/u/20090707/00/0b3b4c31-8cef-4bd2-817e-4a2a445e8b87.html?seed=1787678774 之素材,不代表其他含义。

应网友要求,现提供VB6源码下载(仅核心编码解码模块,不含界面,界面请自行设计):http://download.csdn.net/download/jessezappy/10028248

改进版纯字符串编码解码的易移植源码下载:http://download.csdn.net/download/jessezappy/9707790

今天做了个Base64编码程序,本想将二进制文件编码后可以直接在论坛或Blog上发布,而不用再担心不能上传附件的问题,当然了,只是针对小文件而言,超过几M的大文件不在此列。

20210422 PS:好吧,这篇2009年的老文章居然被判定为“非专业IT知识”文章,那么我就把之前文本内容的那个RAR解压就可以用的程序删了,改为放上近几年新做的:简易可自定义编码表及 Base64+UUE 编码的核心代码发出来。这个代码不包含 UUE 折行切分的部分,如果需要生成 UUE 文件,则需要自己写段 UUE 折行及加行标识的代码即可。

目前我使用该代码最多的用途是使用自定义编码表加密信息,传输后解密。我个人觉得自定义编码表加密的信息以目前的技术应该是无法被破解的,

如有破解高手请留言PK。

Public Function UB64EnArr(pasStr, map) '编码MD5的文本型十六进制串数值内容,例:E4B8AD  -----20200524改合Dim max, idx, i, L, mAllByteIn()L = Len(pasStr) / 2 - 1ReDim mAllByteIn(L)For i = 0 To LmAllByteIn(i) = CByte("&H" & Mid(pasStr, i * 2 + 1, 2))NextUB64EnArr = UB64En(mAllByteIn, map)
End FunctionPublic Function UB64En(mAllByteIn, map) '编码去除 unicode 空 0 字符串byte字节数组 -----20200524改合Dim max, idx, Base64EncMap(64), BASE_64_MAP_INIT, i, LDim ret, ndx, by3Dim first, second, thirdDim inLangth'On Error Resume Next  '---------防止非法字串UB64En = ""L = UBound(mAllByteIn)If (L > 1) ThenSelect Case Len(map) '---20200509改Case 0  '标准Base64码表BASE_64_MAP_INIT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="Case 1  '自定义码表1BASE_64_MAP_INIT ="略,请自行设置" '---web不能用 = +号,改为用 [ _ 代替'Case 2  '标准UUE码表BASE_64_MAP_INIT = "`!" & """" & "#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_~"Case Else  '直接传入自定义码表BASE_64_MAP_INIT = mapEnd Selectmax = Len(BASE_64_MAP_INIT)For idx = 0 To max - 1Base64EncMap(idx) = Asc(Mid(BASE_64_MAP_INIT, idx + 1, 1))NextinLangth = UBound(mAllByteIn) + 1by3 = (inLangth \ 3) * 3ndx = 1Do While ndx <= by3first = mAllByteIn(ndx - 1)second = mAllByteIn(ndx + 0)third = mAllByteIn(ndx + 1)ret = ret & Chr(Base64EncMap((first \ 4) And 63))ret = ret & Chr(Base64EncMap(((first * 16) And 48) + ((second \ 16) And 15)))ret = ret & Chr(Base64EncMap(((second * 4) And 60) + ((third \ 64) And 3)))ret = ret & Chr(Base64EncMap(third And 63))ndx = ndx + 3LoopIf by3 < inLangth Thenfirst = mAllByteIn(ndx - 1)ret = ret & Chr(Base64EncMap((first \ 4) And 63))If (inLangth Mod 3) = 2 Thensecond = mAllByteIn(ndx + 0)ret = ret & Chr(Base64EncMap(((first * 16) And 48) + ((second \ 16) And 15)))ret = ret & Chr(Base64EncMap(((second * 4) And 60))) & Chr(Base64EncMap(UBound(Base64EncMap)))Elseret = ret & Chr(Base64EncMap((first * 16) And 48))ret = ret & Chr(Base64EncMap(UBound(Base64EncMap))) & Chr(Base64EncMap(UBound(Base64EncMap)))End IfEnd IfUB64En = retElseUB64En = ""End If
End FunctionPublic Function UB64EnStr(pasStr, map, codepage) '编码普通字符串 加入编码类型设置base64_utf8,默认为GB2312 -----20200524改合Dim L, mAllByteIn'On Error Resume Next  '---------防止非法字串UB64EnStr = ""L = Len(pasStr) - 1If (L > 1) ThenIf UCase(codepage) = "UTF-8" ThenUB64EnStr = UB64EnArr(str2UTF8(pasStr), map)ElsemAllByteIn = str2arr(pasStr)UB64EnStr = UB64En(mAllByteIn, map)End IfElseUB64EnStr = ""End If
End FunctionPublic Function str2UTF8(szInput) '只返回十六进制文本串 -----20200524改合Dim wch, uch, szRetDim x, iDim nAsc, nAsc2, nAsc3, s2b()'如果输入参数为空,则退出函数If szInput = "" Thenstr2UTF8 = szInputExit FunctionEnd If'开始转换For x = 1 To Len(szInput)'利用mid函数分拆GB编码文字wch = Mid(szInput, x, 1)'利用ascW函数返回每一个GB编码文字的Unicode字符代码'注:asc函数返回的是ANSI 字符代码,注意区别nAsc = AscW(wch)If nAsc < 0 ThennAsc = nAsc + 65536End IfIf (nAsc And &HFF80) = 0 ThenszRet = szRet & Right("00" & Hex(Asc(wch)), 2)ElseIf (nAsc And &HF000) = 0 Thenuch = Hex(((nAsc \ 64)) Or &HC0) & Hex(nAsc And &H3F Or &H80)szRet = szRet & uchElse'GB编码文字的Unicode字符代码在0800 - FFFF之间采用三字节模版 , 2 ^ 12=4096 , 2 ^ 6=64uch = Hex((nAsc \ 4096) Or &HE0) & _Hex((nAsc \ 64) And &H3F Or &H80) & _Hex(nAsc And &H3F Or &H80)szRet = szRet & uchEnd IfEnd IfNext'---------翻译为byte数组
'    ReDim s2b(Len(szRet) / 2 - 1)
'    For i = 1 To Len(szRet) Step 2
'        s2b((i - 1) / 2) = CByte("&H" & Mid(szRet, i, 2))
'    Nextstr2UTF8 = szRet
End FunctionPublic Function str2arr(varstr) '把普通字符串转成二进制数组函数Dim i, varlow, varhigh, varasc, varchar, kDim s2b() 'As Byte'str2bin = ""For i = 0 To Len(varstr) - 1varchar = Mid(varstr, i + 1, 1)varasc = Asc(varchar)' asc对中文字符求出来的值可能为负数,' 加上65536就可求出它的无符号数值' -1在机器内是用补码表示的0xffff,' 其无符号值为65535,65535=-1+65536' 其他负数依次类推。If varasc < 0 Thenvarasc = varasc + 65535End If'对中文的处理:把双字节低位和高位分开If varasc > 255 Thenvarlow = Left(Hex(Asc(varchar)), 2)varhigh = Right(Hex(Asc(varchar)), 2)'str2bin = str2bin & ChrB("&H" & varlow) & ChrB("&H" & varhigh)If i = 0 ThenReDim s2b(1)k = 0s2b(k) = CByte("&H" & varlow) '强制转换为字节,下同s2b(k + 1) = CByte("&H" & varhigh)k = 1ElseReDim Preserve s2b(k + 2)s2b(k + 1) = CByte("&H" & varlow)s2b(k + 2) = CByte("&H" & varhigh)k = k + 2End IfElse'str2bin = str2bin & ChrB(AscB(varchar))If i = 0 ThenReDim s2b(0)k = 0s2b(k) = Asc(varchar)ElseReDim Preserve s2b(k + 1)s2b(k + 1) = Asc(varchar)k = k + 1End IfEnd IfNextstr2arr = s2b
End Function

一个 VBS 写的 Base64 + UUE 编码程序源码,可自定义编码表相关推荐

  1. java写脸萌_FaceLovely 本项目是一个仿安卓脸萌app应用的源码, 款非常有趣的拼脸软件,即使你不会画 android 259万源代码下载- www.pudn.com...

    文件名称: FaceLovely下载  收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 6940 KB 上传时间: 2016-05-25 下载次数: 0 详细说明:本项 ...

  2. vc++6.0:MFC写的一个汉字取模软件(附源码)

    vc++6.0:MFC写的一个汉字取模软件(附源码) 一.毕业有九年了,突然想起以前在大学时候用MFC写的一个汉字取模软件.主要的功能是在PC上获取汉字16X16点阵数据然后通过串口把点阵数据发送给A ...

  3. 我历时3年才写了10余篇源码文章,但收获了100w+阅读

    你好,我是若川.最近来了一些读者朋友,在这里简单介绍自己的经历,也许对你有些启发.之前发过这篇文章,现在修改下声明原创,方便保护版权. 最近组织了源码共读活动1个月,200+人,一起读了4周源码,很多 ...

  4. 红橙Darren视频笔记 类加载机制(API28) 自己写个热修复 查看源码网站

    第一部分 类加载机制 一个Activity是如何被Android虚拟机找到的? 在之前的文章 红橙Darren视频笔记 自定义View总集篇(https://blog.csdn.net/u011109 ...

  5. java计算机毕业设计vue开发一个简单音乐播放器(附源码、数据库)

    java计算机毕业设计vue开发一个简单音乐播放器(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Ec ...

  6. 一个免费开源、跨平台的可视化源码探索项目

    [公众号回复 "1024",免费领取程序员赚钱实操经验] 今天我章鱼猫给大家推荐一个查看源码的神器,超级棒! Sourcetrail,它是一个免费开源.跨平台的可视化源码探索项目. ...

  7. JAVA计算机毕业设计写手管理平台Mybatis+源码+数据库+lw文档+系统+调试部署

    JAVA计算机毕业设计写手管理平台Mybatis+源码+数据库+lw文档+系统+调试部署 JAVA计算机毕业设计写手管理平台Mybatis+源码+数据库+lw文档+系统+调试部署 本源码技术栈: 项目 ...

  8. 一个简单漂亮的网址导航HTML5源码

    正文: 一个简单漂亮的网址导航HTML5源码页面自适应,手机电脑都自动适应大小. 纯HTML代码,然后一个CSS一个JS文件,根据设备自适应,更多信息自行研究,修改index.html内容. 字节网盘 ...

  9. 2023最新UI时光邮局系统+给未来写封信系统 PHP源码/美化版

    正文: 2023最新时光邮局系统 给未来写封信系统 PHP源码 美化版 给未来写封信开源源码,本源码支持用户给未来某个人发送一封信. 前端采用MDUI框架后端对于定时发信采用screen+php的方式 ...

最新文章

  1. windows常用的几个操作
  2. go实现数组切片洗牌函数Shuffle
  3. mysql 的日常管理软件_MySQL常用的日常管理工具
  4. PHP新闻APP,【优速软件】APP/小程序接口:全部新闻列表,POSCMS,CodeIgniter技术文档,PHP开发文档,迅睿CMS框架官方教程...
  5. 微软重新设计 Edge for Android 的用户界面
  6. Hyper-V的安装准备
  7. android 程序更换字体,Android修改自己程序字体的方法详解
  8. Windows Server 林功能级别详解
  9. MVC入门小示例---淘宝商品的搜索和价格筛选
  10. PHP之mb_strrpos使用
  11. 中继段光缆测试与用户光缆测试有什么区别?
  12. WinRAR 32位解压缩软件 v5.21 汉化免费版
  13. 工行u盾显示316_详解工行U盾及使用方法和注意事项
  14. 【JY】基于OpenSees和SAP2000静力动力计算案例分析
  15. 树莓派通过局域网实现远程开机(wake on lan)
  16. hololens 播放video
  17. 室内外一体化融合定位技术浅析--室内定位--新导智能
  18. 多线程——分线程通过Handler操作界面
  19. Java的小数点后精度计算
  20. Nvidia Xavier平台CAN收发控制器调试记录

热门文章

  1. 大浪淘沙后的电三轮市场,谁将“剩者为王”?
  2. 【python爬虫】爬取网贷之家所有P2P平台基本数据并写入MYsql数据库
  3. uniapp抖音网页版
  4. C语言:求字符串的长度
  5. 软考中级和高级选哪个比较好?
  6. 生成一个6行12列的矩阵,其元素值是小于或等于20的随机数。
  7. python用amd还是intel_计算机专业 CPU 应该用 AMD 还是 Intel?
  8. OFCMS 项目开源 java cms 系统 内容管理系统
  9. idea不显示Services工具栏解决办法
  10. 网络协议漫游-HTTP | TCP/IP | P2P