PB实现BASE64加解密
文章目录
- 实例
- 文本加解密
- 文件加解密
- 源代码
实例
文本加解密
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加解密相关推荐
- Flex中的Base64加解密
Flex中的Base64加解密 Flex sdk3就内置了Base64的加/解密工具类 分别是 mx.utils.Base64Encoder mx.utils.Base64Decoder Base64 ...
- java base64 加解密_java Base64加解密
import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; public class Base64Util { public stati ...
- linux下C++base64加解密与图片互转
最近由于工作需要,需要处理由http传来的base64图片数据,特此做下记录也希望能帮到更多的朋友. 部分内容参考Andy____Li 的blog: https://blog.csdn.net/m0_ ...
- Jmeter接口请求Base64加解密
jmeter 对报文进行Base64加解密心得. 业务需求是,对接口进行测试,但需要对报文进行加密,对返回的密文进行解密. 遇到的问题:接口传的报文字段,因为没有加密,所以 ...
- java实现加密———Base64加解密
java实现Base64加解密 @Testpublic void test01() throws Exception {String name = "LuWenMenHu";Str ...
- 【安全算法之base64】base64加解密的C语言源码实现
最近,有项目中需要用到base64的加解密,所以用C语言实现了一遍,测试效果还不错,代码量和RAM消耗都比较低,可以提供给大家参考下. #include <stdbool.h> #incl ...
- golang RSA base64 加解密 签名验签
1.秘钥.加密/签名字符串加密的格式 目前主要见到有hex及base64 (1)hex 针对hex的加解密 import ("encoding/hex" ) hex.DecodeS ...
- qt base64加解密
这里提供两种加解密的方法. 第一种方法:使用QByteArray的toBase64和fromBase64来实现. 第二种方法:使用base64.cpp文件中的base64_encode和base64_ ...
- Base64加解密实现
文章目录 一.说明 1.base64 2.转换的思路 加密思路 解密思路 二.术语和参考资料 ASCII对照表 Base64表 三.整体设计 类接口 四.示例 1.对字符'j'进行加密 2.对&quo ...
最新文章
- Rstudio 实现 爬虫 文本分词 个性化词云设计--我爱中国我爱党
- spring使用AOP注解三步曲
- 分布式唯一id:snowflake算法思考
- 道路 [NOIP模拟]
- C#中数据类型的安全转换(is,as)
- Jmeter5.3安装(window10下)
- C# -- HttpWebRequest 和 HttpWebResponse 的使用
- pca图像压缩python_基于PCA的图像降维及图像重构
- oracle强制drop用户,强制Oracle Drop全局临时表
- HTTP与HTTPS之间的联系与连接状态
- 使用harbor搭建docker镜像私有仓库
- 哲学家就餐问题python_无聊的哲学家进餐问题
- 数据库实验|姓名,课程的随机生成
- 团队成立——Microhard
- MATLAB分集接收技术仿真,分集接收技术.doc
- Windows8.1硬盘安装Ubuntu14.04双系统参考教程及多硬盘注意事项[图]
- 大话西游服务器维护多长时间,《大话西游3》2010-9-21服务器停机维护公告(二)...
- 为什么linux中权限r对应4、w对应2、x对应1
- 这四个才是真正的低代码平台
- Linux - chmod授权文件权限命令详解
热门文章
- [标准库]STM32F103R8T6 串口的收发
- 奔向光明阿波罗(上)
- Moloch 数据常用字段解析(持续更新)
- WINCC如何利用报警记录控件实现操作员操作记录功能(上)
- 主键、外键、关系、超键、候选键---定义
- “智慧城市”让景观照明更“绿色”!
- cmi编码实验_【2017年整理】实验及HDB3码CMI码编码.ppt
- 【译文】追求生产极简主义
- 实现用RPG Maker Mv/Mz完成即时战斗系统
- 日语假名原来可以这么漂亮的书写(日语假名书写演示软件)