开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 204|回复: 5
收起左侧

[精币悬赏] 易语言里怎么调用CryptProtectData?

[复制链接]
结帖率:93% (252/271)
发表于 3 天前 | 显示全部楼层 |阅读模式   广西壮族自治区崇左市
100精币
这个CryptProtectData的api,在易语言里怎么调用阿?

win32crypt.CryptProtectData


结帖率:100% (18/18)

签到天数: 17 天

发表于 前天 00:06 | 显示全部楼层   广东省梅州市
在易语言中调用Windows API CryptProtectData 需要以下步骤。该API用于加密敏感数据(如用户凭据),以下是完整实现方法:

一、数据结构定义
.数据类型 DATA_BLOB
    .成员 cbData, 整数型
    .成员 pbData, 整数型
二、DLL命令声明
.DLL命令 CryptProtectData
    .DLL库文件名 "Crypt32.dll"
    .返回值类型 逻辑型
    .参数 pDataIn  , 整数型   // 输入数据指针
    .参数 szDataDescr  , 文本型   // 数据描述(可空)
    .参数 pOptionalEntropy  , 整数型   // 附加密钥(可空)
    .参数 pvReserved  , 整数型   // 保留参数(必须0)
    .参数 pPromptStruct  , 整数型   // 提示结构(可空)
    .参数 dwFlags  , 整数型   // 标志(如0x1禁止UI)
    .参数 pDataOut  , 整数型   // 输出数据指针

.DLL命令 CryptMemFree
    .DLL库文件名 "Crypt32.dll"
    .返回值类型 整数型
    .参数 pv  , 整数型
三、加密函数示例
.子程序 加密数据, 字节集
.参数 原始数据, 字节集
.局部变量 stIn, DATA_BLOB
.局部变量 stOut, DATA_BLOB
.局部变量 结果, 逻辑型

' 准备输入数据
stIn.cbData = 取字节集长度 (原始数据)
stIn.pbData = 取变量数据地址 (原始数据)

' 调用API加密
结果 = CryptProtectData (取变量地址 (stIn), "MyApp Data", 0, 0, 0, 1, 取变量地址 (stOut))

.如果真 (结果 = 假)
    返回 ({ })  ' 失败返回空
.如果真结束

' 读取加密结果
返回 (指针到字节集 (stOut.pbData, stOut.cbData))

' 释放内存
CryptMemFree (stOut.pbData)
四、使用示例
.子程序 _启动子程序
.局部变量 加密结果, 字节集

加密结果 = 加密数据 (到字节集 ("Hello World"))
.如果 (取字节集长度 (加密结果) > 0)
    写到文件 ("encrypted.bin", 加密结果)
    信息框 ("加密成功", 0, )
.否则
    信息框 ("加密失败", 0, )
.如果结束
五、关键参数说明
dwFlags 常用值:

0x1 (CRYPTPROTECT_UI_FORBIDDEN):禁止弹出密码输入框
0x4 (CRYPTPROTECT_LOCAL_MACHINE):使用机器级密钥
pOptionalEntropy 参数:

可传入额外的密钥数据(需同样结构体)
解密时必须提供相同的熵值
六、注意事项
内存管理:

必须调用CryptMemFree释放加密后的内存
易语言的自动回收机制不适用于API分配的内存
数据安全:

敏感数据在内存中应尽快清除
建议使用RtlZeroMemory清空原始数据内存
跨平台限制:

加密数据只能在相同用户/机器环境下解密
如需跨设备使用需自行处理密钥
完整示例已包含加密流程,解密可参考类似流程使用CryptUnprotectData。实际开发中建议添加错误处理(通过GetLastError获取错误代码)。
回复

使用道具 举报

结帖率:93% (252/271)

签到天数: 8 天

 楼主| 发表于 前天 02:07 | 显示全部楼层   广西壮族自治区崇左市
正鑫软件开发 发表于 2025-2-20 00:06
在易语言中调用Windows API CryptProtectData 需要以下步骤。该API用于加密敏感数据(如用户凭据),以下是 ...

这是dp的吧,试过了,用不了。
回复

使用道具 举报

结帖率:100% (18/18)

签到天数: 20 天

发表于 前天 10:02 | 显示全部楼层   河南省新乡市
果心豆腐酱 发表于 2025-2-20 02:07
这是dp的吧,试过了,用不了。

让AI用C++或者PY语言生成一段代码,要求他封装成DLL,再去b站查一下,怎么让其他语言封装的DLL编译出来支持易语言调用,最后把AI给的DLL代码复制下来,编译,然后用易语言调用,这是最无脑的方法
回复

使用道具 举报

结帖率:100% (2/2)

签到天数: 22 天

发表于 前天 10:30 | 显示全部楼层   香港特别行政区*
来赚个积分,感谢分享。
回复

使用道具 举报

结帖率:93% (252/271)

签到天数: 8 天

 楼主| 发表于 前天 20:35 | 显示全部楼层   广西壮族自治区崇左市
憨憨问号 发表于 2025-2-20 10:02
让AI用C++或者PY语言生成一段代码,要求他封装成DLL,再去b站查一下,怎么让其他语言封装的DLL编译出来支 ...

PY封装的dll,应该不好用,C++。我现在都没整明白怎么用,各种错误,AI给的,还都是64位的,32位死活问不出来
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表