文章目录

  • 实例
    • 文本加解密
    • 文件加解密
  • 源代码

实例

文本加解密

1.加密文本:PB实现BASE64加解密

得到的密文为:UELlrp7njrBCQVNFNjTliqDop6Plr4Y=

2.解密文本:解密上一步得到的密文

得到的明文为:PB实现BASE64加解密

文件加解密

1.加密文件:


文件大小706KB,加密操在作代码调试状态耗时约3000ms,在程序运行状态耗时约500ms

2.解密文件:解密上一步得到的密文

密文长度为963336,解密操在作代码调试状态耗时约4400ms,在程序运行状态耗时约1600ms

解密得到的文件与原文件完全一致,可以正常打开

源代码

代码拷贝到文本编辑器,另存为 n_base64.sru,导入pbl
新版本:PB实现URL模式及MIME模式的BASE64加解密
发现BUG请留言或私信,以便修正(QQ:768310524 TEL:18649713925)

$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[] = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'end variables
forward prototypes
public function string encode (blob plain)
public function blob decode (string cypher)
end prototypespublic function string encode (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 decode (string cypher);blob lblb_plain
long i,j,ll_loop
char lc_cypher[]
ulong lul_tmp,lul_len
byte lbyte[]
int li_modlc_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 ifll_loop = upperbound(lc_cypher) / 4
for i = 1 to ll_looplul_tmp = (pos(code,lc_cypher[4 * i - 3]) - 1) * 262144 +&(pos(code,lc_cypher[4 * i - 2]) - 1) * 4096 +&(pos(code,lc_cypher[4 * i - 1]) - 1) * 64 +&(pos(code,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实现BASE64加解密相关推荐

  1. Flex中的Base64加解密

    Flex中的Base64加解密 Flex sdk3就内置了Base64的加/解密工具类 分别是 mx.utils.Base64Encoder mx.utils.Base64Decoder Base64 ...

  2. java base64 加解密_java Base64加解密

    import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; public class Base64Util { public stati ...

  3. linux下C++base64加解密与图片互转

    最近由于工作需要,需要处理由http传来的base64图片数据,特此做下记录也希望能帮到更多的朋友. 部分内容参考Andy____Li 的blog: https://blog.csdn.net/m0_ ...

  4. Jmeter接口请求Base64加解密

    jmeter 对报文进行Base64加解密心得.        业务需求是,对接口进行测试,但需要对报文进行加密,对返回的密文进行解密.        遇到的问题:接口传的报文字段,因为没有加密,所以 ...

  5. java实现加密———Base64加解密

    java实现Base64加解密 @Testpublic void test01() throws Exception {String name = "LuWenMenHu";Str ...

  6. 【安全算法之base64】base64加解密的C语言源码实现

    最近,有项目中需要用到base64的加解密,所以用C语言实现了一遍,测试效果还不错,代码量和RAM消耗都比较低,可以提供给大家参考下. #include <stdbool.h> #incl ...

  7. golang RSA base64 加解密 签名验签

    1.秘钥.加密/签名字符串加密的格式 目前主要见到有hex及base64 (1)hex 针对hex的加解密 import ("encoding/hex" ) hex.DecodeS ...

  8. qt base64加解密

    这里提供两种加解密的方法. 第一种方法:使用QByteArray的toBase64和fromBase64来实现. 第二种方法:使用base64.cpp文件中的base64_encode和base64_ ...

  9. Base64加解密实现

    文章目录 一.说明 1.base64 2.转换的思路 加密思路 解密思路 二.术语和参考资料 ASCII对照表 Base64表 三.整体设计 类接口 四.示例 1.对字符'j'进行加密 2.对&quo ...

最新文章

  1. Rstudio 实现 爬虫 文本分词 个性化词云设计--我爱中国我爱党
  2. spring使用AOP注解三步曲
  3. 分布式唯一id:snowflake算法思考
  4. 道路 [NOIP模拟]
  5. C#中数据类型的安全转换(is,as)
  6. Jmeter5.3安装(window10下)
  7. C# -- HttpWebRequest 和 HttpWebResponse 的使用
  8. pca图像压缩python_基于PCA的图像降维及图像重构
  9. oracle强制drop用户,强制Oracle Drop全局临时表
  10. HTTP与HTTPS之间的联系与连接状态
  11. 使用harbor搭建docker镜像私有仓库
  12. 哲学家就餐问题python_无聊的哲学家进餐问题
  13. 数据库实验|姓名,课程的随机生成
  14. 团队成立——Microhard
  15. MATLAB分集接收技术仿真,分集接收技术.doc
  16. Windows8.1硬盘安装Ubuntu14.04双系统参考教程及多硬盘注意事项[图]
  17. 大话西游服务器维护多长时间,《大话西游3》2010-9-21服务器停机维护公告(二)...
  18. 为什么linux中权限r对应4、w对应2、x对应1
  19. 这四个才是真正的低代码平台
  20. Linux - chmod授权文件权限命令详解

热门文章

  1. [标准库]STM32F103R8T6 串口的收发
  2. 奔向光明阿波罗(上)
  3. Moloch 数据常用字段解析(持续更新)
  4. WINCC如何利用报警记录控件实现操作员操作记录功能(上)
  5. 主键、外键、关系、超键、候选键---定义
  6. “智慧城市”让景观照明更“绿色”!
  7. cmi编码实验_【2017年整理】实验及HDB3码CMI码编码.ppt
  8. 【译文】追求生产极简主义
  9. 实现用RPG Maker Mv/Mz完成即时战斗系统
  10. 日语假名原来可以这么漂亮的书写(日语假名书写演示软件)