|
|
看了下日志是 desede/ECB/PKCS7Padding,其实就是3DES,密钥 24 字节刚好。用系统 CryptoAPI 直接做就行。
.版本 2
.支持库 spec
.DLL命令 取CryptProv, 整数型, "advapi32.dll", "CryptAcquireContextW"
.参数 phProv, 整数型, 传址
.参数 pszContainer, 整数型
.参数 pszProvider, 整数型
.参数 dwProvType, 整数型
.参数 dwFlags, 整数型
.DLL命令 创建密钥, 整数型, "advapi32.dll", "CryptImportKey"
.参数 hProv, 整数型
.参数 pbData, 字节集, 传址
.参数 dwDataLen, 整数型
.参数 hPubKey, 整数型
.参数 dwFlags, 整数型
.参数 phKey, 整数型, 传址
.DLL命令 加密数据, 整数型, "advapi32.dll", "CryptEncrypt"
.参数 hKey, 整数型
.参数 hHash, 整数型
.参数 Final, 整数型
.参数 dwFlags, 整数型
.参数 pbData, 字节集, 传址
.参数 pdwDataLen, 整数型, 传址
.参数 dwBufLen, 整数型
.DLL命令 销毁密钥, 整数型, "advapi32.dll", "CryptDestroyKey", 参数 hKey, 整数型
.DLL命令 释放CSP, 整数型, "advapi32.dll", "CryptReleaseContext", 参数 hProv, 整数型, 参数 dwFlags, 整数型
.DLL命令 设置密钥模式, 整数型, "advapi32.dll", "CryptSetKeyParam"
.参数 hKey, 整数型
.参数 dwParam, 整数型
.参数 pbData, 字节集, 传址
.参数 dwFlags, 整数型
.常量 PROV_RSA_AES, "24"
.常量 CRYPT_VERIFYCONTEXT, "0xF0000000"
.常量 PLAINTEXTKEYBLOB, "8"
.常量 CUR_BLOB_VERSION, "2"
.常量 CALG_3DES, "0x00006609"
.常量 KP_MODE, "4"
.常量 CRYPT_MODE_ECB, "2"
.子程序 对称加密3DES_ECB, 字节集, 公开
.参数 密钥数据, 字节集, , 24 字节
.参数 明文数据, 字节集
.局部变量 hProv, 整数型
.局部变量 hKey, 整数型
.局部变量 密文, 字节集
.局部变量 长度, 整数型
.局部变量 blob, 字节集
取CryptProv (hProv, 0, 0, PROV_RSA_AES, CRYPT_VERIFYCONTEXT)
.如果真 (hProv = 0)
返回 ({ })
.如果真结束
' 组合 PLAINTEXTKEYBLOB,直接导入 3DES 密钥
blob = 到字节集 (到整数 (PLAINTEXTKEYBLOB)) + 到字节集 (到整数 (CUR_BLOB_VERSION)) + { 0, 0 } + 到字节集 (到整数 (CALG_3DES)) + 到字节集 (取字节集长度 (密钥数据)) + 密钥数据
.如果真 (创建密钥 (hProv, blob, 取字节集长度 (blob), 0, 0, hKey) = 0)
释放CSP (hProv, 0)
返回 ({ })
.如果真结束
' 设为 ECB 模式
设置密钥模式 (hKey, KP_MODE, 到字节集 (到整数 (CRYPT_MODE_ECB)), 0)
' 凑够 8 字节倍数的缓冲,系统自动 PKCS7 填充
密文 = 明文数据 + 取空白字节集 (8 - 取字节集长度 (明文数据) % 8)
长度 = 取字节集长度 (密文)
.如果真 (加密数据 (hKey, 0, 1, 0, 密文, 长度, 长度) = 0)
销毁密钥 (hKey)
释放CSP (hProv, 0)
返回 ({ })
.如果真结束
密文 = 取字节集左边 (密文, 长度)
销毁密钥 (hKey)
释放CSP (hProv, 0)
返回 (密文)
.子程序 _按钮1_被单击
.局部变量 密文, 字节集
密文 = 对称加密3DES_ECB (到字节集 (“tRS9KykY$TW7Vv(rI0O0#)BX”), 到字节集 (“activation=997”))
调试输出 (编码_BASE64编码 (密文)) ' 输出 7zcMw4jJghMCGi+I2p6m6g==
跑了下和你的结果一致,直接用就行。WT 可能不支持 3DES。 |
|