[原创]纯lisp实现最高效base64编码解码
本帖最后由 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 db256 dup (0) ; buffer for output
newstr1 db256 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)
kozmosovia 发表于 2024-6-18 18:45
好像在lispsys=1的情况下,不能用。
不支持utf-8字符串,只支持ansi编码,必须lispsys=0 dwx爱好者可以参照汇编码实现同样功能 本帖最后由 kozmosovia 于 2024-6-18 19:00 编辑
好像在lispsys=1的情况下,不能用。 这个也是用隐藏函数的吗? 这也太强了。:victory: 先点赞后观看 6啊 太棒了,点赞~
下载来存着!! 先顶后看,火速下载
太棒了,点赞~ 速度确实非常快,比系统的还快
页:
[1]
2