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 forward

global type n_base64 from nonvisualobject autoinstantiate
end type

type variables
private:
	char code[] = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
	
end variables
forward prototypes
public function string encode (blob plain)
public function blob decode (string cypher)
end prototypes

public function string encode (blob plain);byte lbyte[]
char lc_cypher[]
long i,j,ll_loop
ulong lul_len,lul_tmp
int li_mod

lbyte = getByteArray(plain)
lul_len = upperbound(lbyte)
li_mod = mod(lul_len,3)
choose case li_mod
	case 1
		lbyte[lul_len + 1] = 0
		lbyte[lul_len + 2] = 0
	case 2
		lbyte[lul_len + 1] = 0
end choose

ll_loop =upperbound(lbyte) / 3

for i = 1 to ll_loop
	lul_tmp = lbyte[3 * i - 2] * 65536 + lbyte[3 * i - 1] * 256 + lbyte[3 * i]
	j += 1
	lc_cypher[j] = code[lul_tmp / 262144 + 1]
	lul_tmp = mod(lul_tmp,262144)
	j += 1
	lc_cypher[j] = code[lul_tmp / 4096 + 1]
	lul_tmp = mod(lul_tmp,4096)
	j += 1
	lc_cypher[j] = code[lul_tmp / 64 + 1]
	lul_tmp = mod(lul_tmp,64)
	j += 1
	lc_cypher[j] = code[lul_tmp + 1]
next

choose case li_mod
	case 1
		lc_cypher[j] = '='
		lc_cypher[j - 1] = '='
	case 2
		lc_cypher[j] = '='
end choose

return lc_cypher

end function

public 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_mod

lc_cypher = cypher
lul_len = upperbound(lc_cypher)
if lc_cypher[lul_len] = '=' then
	li_mod = 2
	lc_cypher[lul_len] = 'A'
end if
if lc_cypher[lul_len - 1] = '=' then
	li_mod = 1
	lc_cypher[lul_len - 1] = 'A'
end if

ll_loop = upperbound(lc_cypher) / 4
for i = 1 to ll_loop
	lul_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 += 1
	lbyte[j] = lul_tmp / 65536
	lul_tmp = mod(lul_tmp,65536)
	j += 1
	lbyte[j] = lul_tmp / 256
	lul_tmp = mod(lul_tmp,256)
	j += 1
	lbyte[j] = lul_tmp
next

lblb_plain = blob(lbyte)
choose case li_mod
	case 1
		lblb_plain = blobmid(lblb_plain,1,len(lblb_plain) - 2)
	case 2
		lblb_plain = blobmid(lblb_plain,1,len(lblb_plain) - 1)
end choose

return lblb_plain
end function

on n_base64.create
call super::create
TriggerEvent( this, "constructor" )
end on

on n_base64.destroy
TriggerEvent( this, "destructor" )
call super::destroy
end on


  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值