- 积分
- 36704
- 明经币
- 个
- 注册时间
- 2013-8-16
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
本帖最后由 baitang36 于 2024-6-18 20:44 编辑
纯算法实现base64编码解码 - AutoLISP/Visual LISP 编程技术 - AutoCAD论坛 - 明经CAD社区 - Powered by Discuz! (mjtd.com)
纯lisp实现更高效的base64编码解码 - AutoLISP/Visual LISP 编程技术 - AutoCAD论坛 - 明经CAD社区 - Powered by Discuz! (mjtd.com)
看了以上两个帖子,觉得已经非常不错了。
但觉得还有点慢,怎么办?上汇编,只有汇编语言写的东西才可以用最。最快的代码一定是汇编,别的语言最终执行的机器码也相当于汇编。
汇编语言的试验代码很简单
.data
pbBinary db 256 dup (0) ; buffer for output
newstr1 db 256 dup (0)
pszString db "1234567890123456789012",0
db 100 dup(0)
cchString dd 22
dwFlags dd 1
pcbBinary dd 36
pdwSkip dd 0
pdwFlags dd 0
pcbBinary1 dd 22
.code
start:
invoke CryptStringToBinaryA,addr pszString, 22,1, 0,addr pcbBinary,0,0
invoke CryptStringToBinaryA,addr pszString, 22,1, addr pbBinary,addr pcbBinary,0,0 ;解密成功,输出二进制字符串
invoke CryptBinaryToStringA, addr pbBinary,16, 1,addr newstr1, addr pcbBinary1 ;加密
invoke ExitProcess,eax
end start
试验成功后再把它改成autolisp
程序中定义了三个函数:
syz-base64-encode-a (str ) 加密字符串
syz-base64-decode-a (str ) 解密字符串
syz-base64-decode-aL (str) 解密字符串,输出一个表。为了方便使用二进制数据。
由于使用了保留函数调用CryptStringToBinaryA,仅支持acad,32位64位都可以,高版本lispsys=0才能用。
只能使用ansi编码,不支持Unicode
用法:
命令: (syz-base64-encode-a "12345上山打老虎")
"MTIzNDXJz8m9tPLAz7ui"
命令: (syz-base64-decode-a "MTIzNDXJz8m9tPLAz7ui")
"12345上山打老虎"
命令: (syz-base64-decode-al "MTIzNDXJz8m9tPLAz7ui")
(49 50 51 52 53 201 207 201 189 180 242 192 207 187 162)
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
x
评分
-
查看全部评分
|