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