文章目录

  • BASE64编码
    • 标准编码
    • URL编码
    • MIME编码
  • 编码与解码测试
    • 测试文本
    • URL模式
      • 编码
      • 解码
    • MIME模式
      • 编码
      • 解码
    • 标准模式
      • 编码
      • 解码
  • 源代码

BASE64编码

标准编码

将任意字节流编码为字符串,每3字节转换为4个字符,用于编码的字符集合为如下64个字符:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

URL编码

标准编码的字符集合中,把+换成-,把/换成_,即编码的字符集合为:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_

MIME编码

标准编码每76个字符换行一次

编码与解码测试

测试文本

Base64编码可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的一个标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base64编码不仅比较简短,同时也具有不可读性,即所编码的数据不会被人用肉眼所直接看到。

URL模式

编码

n_base64 ln_base64
blob lblb_plainlblb_plain = blob(mle_1.text,encodingUTF8!)
mle_2.text = ln_base64.urlencode(lblb_plain)return 0

解码

n_base64 ln_base64
blob lblb_plainlblb_plain = ln_base64.urldecode(mle_1.text)
mle_2.text = string(lblb_plain,encodingUTF8!)return 0

MIME模式

编码

n_base64 ln_base64
blob lblb_plainlblb_plain = blob(mle_1.text,encodingUTF8!)
mle_2.text = ln_base64.mimeencode(lblb_plain)return 0

解码

n_base64 ln_base64
blob lblb_plainlblb_plain = ln_base64.mimedecode(mle_1.text)
mle_2.text = string(lblb_plain,encodingUTF8!)return 0

标准模式

编码

n_base64 ln_base64
blob lblb_plainlblb_plain = blob(mle_1.text,encodingUTF8!)
mle_2.text = ln_base64.encode(lblb_plain)return 0

解码

n_base64 ln_base64
blob lblb_plainlblb_plain = ln_base64.decode(mle_1.text)
mle_2.text = string(lblb_plain,encodingUTF8!)return 0

源代码

发现BUG请留言或私信,以便修正(QQ:768310524 TEL:18649713925)
代码拷贝到文本编辑器,另存为 n_base64.sru

$PBExportHeader$n_base64.sru
forward
global type n_base64 from nonvisualobject
end type
end forwardglobal type n_base64 from nonvisualobject autoinstantiate
end typetype variables
private:char code[]char standardCode[] =  'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'char urlCode[] = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'
end variablesforward prototypes
public function string encode (blob plain)
public function blob decode (string cypher)
public function string urlencode (blob plain)
public function blob urldecode (string cypher)
public function string mimeencode (blob plain)
public function blob mimedecode (string cypher)
public function string _enc (blob plain)
public function blob _dec (string cypher)
end prototypespublic function string encode (blob plain);
code = standardCodereturn _enc(plain)
end functionpublic function blob decode (string cypher);
code = standardCodereturn _dec(cypher)
end functionpublic function string urlencode (blob plain);
code = urlCodereturn _enc(plain)
end functionpublic function blob urldecode (string cypher);
code = urlCodereturn _dec(cypher)
end functionpublic function string mimeencode (blob plain);long i,ll_loop
string ls_cyphercode = standardCodell_loop = ceiling(len(plain) / 57)
for i = 1 to ll_loopls_cypher += _enc(blobmid(plain,57 * i - 56,57)) + '~r~n'
nextreturn left(ls_cypher,len(ls_cypher) - 2)
end functionpublic function blob mimedecode (string cypher);char lch_cypher[],lch[]
long i,j,ll_lencode = standardCodelch = cypher
ll_len = len(cypher)
for i = 1 to ll_lenif lch[i] <> '~r' and lch[i] <> '~n' thenj++lch_cypher[j] = lch[i]end if
nextreturn _dec(lch_cypher)
end functionpublic function string _enc (blob plain);byte lbyte[]
char lc_cypher[]
long i,j,ll_loop
ulong lul_len,lul_tmp
int li_modlbyte = getByteArray(plain)
lul_len = upperbound(lbyte)
li_mod = mod(lul_len,3)
choose case li_modcase 1lbyte[lul_len + 1] = 0lbyte[lul_len + 2] = 0case 2lbyte[lul_len + 1] = 0
end choosell_loop =upperbound(lbyte) / 3for i = 1 to ll_looplul_tmp = lbyte[3 * i - 2] * 65536 + lbyte[3 * i - 1] * 256 + lbyte[3 * i]j += 1lc_cypher[j] = code[lul_tmp / 262144 + 1]lul_tmp = mod(lul_tmp,262144)j += 1lc_cypher[j] = code[lul_tmp / 4096 + 1]lul_tmp = mod(lul_tmp,4096)j += 1lc_cypher[j] = code[lul_tmp / 64 + 1]lul_tmp = mod(lul_tmp,64)j += 1lc_cypher[j] = code[lul_tmp + 1]
nextchoose case li_modcase 1lc_cypher[j] = '='lc_cypher[j - 1] = '='case 2lc_cypher[j] = '='
end choosereturn lc_cypherend functionpublic function blob _dec (string cypher);blob lblb_plain
long i,j,ll_loop
char lc_cypher[]
ulong lul_tmp,lul_len
byte lbyte[]
int li_mod
string ls_codeslc_cypher = cypher
lul_len = upperbound(lc_cypher)
if lc_cypher[lul_len] = '=' thenli_mod = 2lc_cypher[lul_len] = 'A'
end if
if lc_cypher[lul_len - 1] = '=' thenli_mod = 1lc_cypher[lul_len - 1] = 'A'
end ifls_codes = code
ll_loop = upperbound(lc_cypher) / 4
for i = 1 to ll_looplul_tmp = (pos(ls_codes,lc_cypher[4 * i - 3]) - 1) * 262144 +&(pos(ls_codes,lc_cypher[4 * i - 2]) - 1) * 4096 +&(pos(ls_codes,lc_cypher[4 * i - 1]) - 1) * 64 +&(pos(ls_codes,lc_cypher[4 * i]) - 1)j += 1lbyte[j] = lul_tmp / 65536lul_tmp = mod(lul_tmp,65536)j += 1lbyte[j] = lul_tmp / 256lul_tmp = mod(lul_tmp,256)j += 1lbyte[j] = lul_tmp
nextlblb_plain = blob(lbyte)
choose case li_modcase 1lblb_plain = blobmid(lblb_plain,1,len(lblb_plain) - 2)case 2lblb_plain = blobmid(lblb_plain,1,len(lblb_plain) - 1)
end choosereturn lblb_plain
end functionon n_base64.create
call super::create
TriggerEvent( this, "constructor" )
end onon n_base64.destroy
TriggerEvent( this, "destructor" )
call super::destroy
end on

PB实现URL模式及MIME模式的BASE64加解密相关推荐

  1. PB实现BASE64加解密

    文章目录 实例 文本加解密 文件加解密 源代码 实例 文本加解密 1.加密文本:PB实现BASE64加解密 得到的密文为:UELlrp7njrBCQVNFNjTliqDop6Plr4Y= 2.解密文本 ...

  2. 关于laravel模板中生成URL的几种模式总结

    1.通过url辅助函数(路由)生成: ? 1 location.href = "{{url('user/index2')}}"; 或者: ? 1 location.href = & ...

  3. Edge开启IE兼容模式---针对指定网址URL开启Internet Explorer模式页面 设置指南

    windows10开始,操作系统默认提供了Edge浏览器.win10还自带有IE.但是到了windows11,不再提供IE,只有Edge了.这给打开老应用带来了一系列的麻烦,以前的一些陈旧B/S应用, ...

  4. 浅谈浏览器标准模式与怪异模式、文档类型

    在网页设计制作过程中,新人往往会遇到一个问题,就是浏览器的不兼容问题.这种状况在大学学习过程中会经常遇到,但一直也没有得到很好的解决,今天有机会仔细研究了一下,这是有关浏览器标准模式与怪异模式之间的问 ...

  5. 反模式? 只有模式不彻底吧

    我认为,没有反模式,只有模式不彻底. " 某人说:"软件都不是一个人能写出来的,我们需要去整体控制." 他快要走了,那个影响我太多的人. " 1. Cremat ...

  6. 32位x86处理器编程导入——《x86汇编语言:从实模式到保护模式》读书笔记08

    在说正题之前,我们先看2个概念. 1.指令集架构(ISA) ISA 的全称是 instruction set architecture,中文就是指令集架构,是指对程序员实际"可见" ...

  7. IIS7 经典模式和集成模式的区别分析

    IIS7.0中的Web应用程序有两种配置模式:经典模式和集成模式.两者区别大家可以参考下,根据实际情况选用. 经典模式是为了与之前的版本兼容,使用ISAPI扩展来调用ASP.NET运行库,原先运行于I ...

  8. 委派模式与策略模式综合应用

    在上面的代码中我们列举了非常几个业务场景,相信小伙伴对委派模式和策略模式有了非常深刻的理解了.现在,我们再来回顾一下,DispatcherServlet 的委派逻辑,代码如下: private voi ...

  9. JS异步模式与Promise模式

    JS异步模式与Promise模式 - 转 引子 异步模式在web编程中变得越来越重要,对于web主流语言Javascript来说,这种模式实现起来不是很利索,为此,许多Javascript库(比如 j ...

  10. java dao模式_Java DAO 模式

    DAO 模式 DAO (DataAccessobjects 数据存取对象)是指位于业务逻辑和持久化数据之间实现对持久化数据的访问.通俗来讲,就是将数据库操作都封装起来. 对外提供相应的接口 在面向对象 ...

最新文章

  1. java判断闰年通过多态方法_04748《Java语言程序设计》实验指导书.doc
  2. 论程序员如何规划职业路线?网友:从码农到工程师?
  3. python3 一 多线程死锁问题及解决方案
  4. “物联网”中,少了这项技术,会损失多少,算过吗!
  5. 机器视觉:系统中影响图像质量的因素有哪些?
  6. JavaSE基本语法练习题(下)
  7. 高等数学 下册 第九章 偏导数 笔记
  8. Johnson算法寻找图中的所有简单环路
  9. linux攻防比赛_浅谈网络攻防大赛中的Linux服务器的加固
  10. 如何获取Windows 10的旧默认桌面背景
  11. Spring Security 4 使用@PreAuthorize,@PostAuthorize, @Secured, EL实现方法安全(带源码)
  12. 报错解决——ValueError: row index was 65536, not allowed by .xls format
  13. Day17(集合)学习记录(HashSet集合 HashMap集合)
  14. Android计步器案例
  15. 【转】Hadoop学习路线图
  16. NodeRed基础1--循环结构
  17. 女生要不要去北航学计算机,在北航读书有个女朋友是种怎样的体验?
  18. 计算机网络-CPT实验
  19. 4.贪心算法 含例题
  20. 华三三层交换机vlan互通配置的坑

热门文章

  1. 翁凯C语言程序设计期末考试
  2. 极大似然函数求解_极大似然估计详解
  3. 海南师范大学本科毕业论文答辩PPT模板
  4. QTDesigner简介
  5. Linux shell脚本文件的各种执行方式
  6. idea安装插件后无法启动
  7. IO、NIO和AIO的区别
  8. 项目管理手记 八 SaaS模式的DRP系统是否适用
  9. 零基础自学软件测试-项目经验-电商项目实战-测试用例设计-促销中心
  10. 谷歌浏览器离线更换皮肤-安装谷歌浏览器插件与问题解决