文章目录

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

实例

文本加解密

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. 深入出不来nodejs源码-V8引擎初探
  2. 每天一道LeetCode-----将数字用字母表示(本质是26进制转换)
  3. linux分区工具fdisk的使用
  4. c++builder启动了怎么停止_App 竟然是这样跑起来的 —— Android App/Activity 启动流程分析...
  5. datatable转化泛型
  6. react项目_如何从零开始创建React项目(三种方式)
  7. SecureCRT终端仿真程序下载及安装使用
  8. 人工智能/数据科学比赛汇总 2019.2
  9. java中找不到javax包_logstash 找不到 java 环境
  10. python复杂网络全局效率计算_python复杂网络库networkx:算法
  11. centOS 安装远程桌面
  12. Android BT种子文件解析
  13. xbox手柄接收器驱动_Xbox精英手柄,对这款游戏手柄使用感受
  14. 编译原理课程设计c语言,编译原理课程设计心得体会
  15. 光缆接续盒图标_光缆线路施工技术(超全)
  16. Exchange Server 2016下载链接
  17. WGS84(GPS坐标) BD09坐标(百度坐标)GCJ02(国测局坐标) 的相互转换
  18. Destoon7.0会员中心模板 B2B系统商务中心模板源码下载
  19. Vant Icon 图标
  20. 如何让dede支持php7,dedecms在php7下的使用方法,织梦dedecsm后台一片空白的解决方法...

热门文章

  1. 博客网站服务器设置,个人博客建站全攻略之一:IIS配置
  2. 写个rpc调用,试试自己了解多少
  3. 电子营业执照可信认证服务商--北京商兆科技有限公司 报名参与2022身份识别技术大会
  4. Memorandum
  5. vi实践——vi编辑器使用实践小记
  6. Yahoo前端的35条优化军规
  7. 【交通标志识别】基于matlab Hog+SVM路标检测与识别【含Matlab源码 1715期】
  8. 2015年新的开始新的生活
  9. Gstreamer学习笔记(4):pad定义、连接、流动
  10. python加密方式-AES加密ECB模式