开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 113|回复: 0
收起左侧

[易源码分享] 【libsodium】ED25519签名模块

[复制链接]
结帖率:60% (3/5)
发表于 昨天 22:49 | 显示全部楼层 |阅读模式   广东省深圳市
分享源码
界面截图: -
是否带模块: -
备注说明: -
本帖最后由 易造轮 于 2026-6-23 00:34 编辑

易语言原生无 ED25519 加密能力,工业界最稳妥的方案是封装成熟开源库 libsodium 的 DLL。libsodium 是密码学领域的标准实现,安全性、性能和跨语言兼容性都有保障,远优于纯易语言手写的椭圆曲线实现(纯易语言实现大数运算效率极低、安全性无法验证,不推荐生产环境使用)。

下载对应位数的 libsodium.dll:
官方下载地址:https://download.libsodium.org/libsodium/releases/
下载 Win32 版本:libsodium-1.0.21-stable-msvc.zip
将 libsodium.dll 放到你的易语言程序同级目录,或系统 System32/SysWOW64 目录。
  
子程序名返回值类型公开备 注
__启动窗口_创建完毕  
测试ED25519 ()
子程序名返回值类型公开备 注
测试ED25519  
变量名类 型静态数组备 注
公钥字节集 
私钥字节集 
消息字节集 
签名字节集 
验签结果逻辑型 
' 1. 初始化加密库
如果真 (初始化加密库 ())
信息框 (“加密库初始化失败,请检查libsodium.dll是否存在”, 0, “错误”, )
返回 ()

' 2. 生成密钥对
如果真 (生成密钥对 (公钥, 私钥))
信息框 (“密钥对生成失败”, 0, “错误”, )
返回 ()

' 3. 待签名消息
消息 = 到字节集 (“Hello, ED25519 with 易语言!”)
' 4. 签名
签名 = 消息签名 (消息, 私钥)
如果真 (取字节集长度 (签名) = 0)
信息框 (“签名失败”, 0, “错误”, )
返回 ()

' 5. 验签
如果 (验签结果)
信息框 (“签名验证通过!”, 0, “成功”, )
信息框 (“签名验证失败!”, 0, “失败”, )

子程序名返回值类型公开备 注
初始化加密库逻辑型 程序启动时调用1次,返回是否初始化成功
变量名类 型静态数组备 注
ret整数型 
ret = sodium_init ()
返回 (ret ≠ -1)
子程序名返回值类型公开备 注
生成密钥对逻辑型 随机生成ED25519公钥+私钥
参数名类 型参考可空数组备 注
公钥字节集输出32字节公钥
私钥字节集输出64字节私钥
变量名类 型静态数组备 注
ret整数型 
' 预分配标准长度空间
公钥 = 取空白字节集 (32)
私钥 = 取空白字节集 (64)
ret = crypto_sign_keypair (公钥, 私钥)
返回 (ret = 0)
子程序名返回值类型公开备 注
种子导入密钥对逻辑型 通过32字节种子私钥还原完整密钥对
参数名类 型参考可空数组备 注
种子私钥字节集32字节种子
公钥字节集输出32字节公钥
完整私钥字节集输出64字节完整私钥
变量名类 型静态数组备 注
ret整数型 
如果真 (取字节集长度 (种子私钥) ≠ 32)
返回 ()
公钥 = 取空白字节集 (32)
完整私钥 = 取空白字节集 (64)
ret = crypto_sign_seed_keypair (公钥, 完整私钥, 种子私钥)
返回 (ret = 0)
子程序名返回值类型公开备 注
消息签名字节集 对消息生成ED25519签名,返回64字节签名,失败返回空
参数名类 型参考可空数组备 注
待签名消息字节集原始消息数据
私钥字节集64字节ED25519私钥
变量名类 型静态数组备 注
sig字节集 
siglen长整数型 
ret整数型 
如果真 (取字节集长度 (私钥) ≠ 64)
返回 ({  })
sig = 取空白字节集 (64)
siglen = 64
ret = crypto_sign_detached (sig, siglen, 待签名消息, 取字节集长度 (待签名消息), 私钥)
如果真 (ret ≠ 0)
返回 ({  })
返回 (sig)
子程序名返回值类型公开备 注
签名验证逻辑型 验证ED25519签名,返回是否通过
参数名类 型参考可空数组备 注
原始消息字节集原始消息数据
签名数据字节集64字节签名
公钥字节集32字节ED25519公钥
如果真 (取字节集长度 (签名数据) ≠ 64 取字节集长度 (公钥) ≠ 32)
返回 ()
返回 (crypto_sign_verify_detached (签名数据, 原始消息, 取字节集长度 (原始消息), 公钥) = 0)
DLL命令名返回值类型公开备 注
sodium_init整数型 初始化libsodium库,全局调用1次即可;成功返回1,已初始化返回0,失败返回-1
DLL库文件名:
libsodium.dll
在DLL库中对应命令名:
@sodium_init
参数名类 型传址数组备 注
DLL命令名返回值类型公开备 注
crypto_sign_keypair整数型 随机生成ED25519密钥对;成功返回0
DLL库文件名:
libsodium.dll
在DLL库中对应命令名:
@crypto_sign_keypair
参数名类 型传址数组备 注
pk字节集输出公钥,需预分配32字节空间
sk字节集输出私钥,需预分配64字节空间
DLL命令名返回值类型公开备 注
crypto_sign_seed_keypair整数型 通过32字节种子生成密钥对;成功返回0
DLL库文件名:
libsodium.dll
在DLL库中对应命令名:
@crypto_sign_seed_keypair
参数名类 型传址数组备 注
pk字节集输出公钥32字节
sk字节集输出私钥64字节
seed字节集32字节种子私钥
DLL命令名返回值类型公开备 注
crypto_sign_detached整数型 生成分离式签名;成功返回0
DLL库文件名:
libsodium.dll
在DLL库中对应命令名:
@crypto_sign_detached
参数名类 型传址数组备 注
sig字节集输出签名,需预分配64字节空间
siglen_p整数型输出实际签名长度
m字节集待签名原始消息
mlen长整数型消息字节长度
sk字节集64字节ED25519私钥
DLL命令名返回值类型公开备 注
crypto_sign_verify_detached整数型 验证分离式签名;成功返回0,失败返回-1
DLL库文件名:
libsodium.dll
在DLL库中对应命令名:
@crypto_sign_verify_detached
参数名类 型传址数组备 注
sig字节集64字节签名数据
m字节集原始消息数据
mlen长整数型消息字节长度
pk字节集32字节ED25519公钥




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

本版积分规则 致发广告者

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

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

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