仓颉语言搞国密?HiCrypto SM2签名验签+SM3哈希手把手实战教程
仓颉语言搞国密HiCrypto SM2签名验签SM3哈希手把手实战教程【免费下载链接】hicryptoHiCrypto是一个基于Cangjie语言开发的密码学库底层密码密码套件使用了华为公司自研的 openHiTls, 提供高效、敏捷的全场景开源密码学开发套件项目地址: https://gitcode.com/Cangjie-TPC/hicryptoHiCrypto 是一款基于仓颉Cangjie语言开发的开源密码学库底层采用华为自研的 openHiTLS 密码套件提供 SM2 国密签名验签、SM3 国密哈希、SHA 系列哈希和 HMAC 等开箱即用的接口。本教程手把手带你从零搭建环境5 分钟跑通 SM2 签名验签与 SM3 哈希计算让新手快速上手仓颉语言国密开发。为什么用 HiCrypto 做国密开发很多开发者想接触国密算法却常被复杂的 C 语言 API 劝退。HiCrypto 的设计思路很清晰把底层的复杂度封装在 ffi/keys.c 里向上只暴露简洁的仓颉对象接口。它的核心优势国密算法原生支持SM2 签名/验签/加解密、SM3 哈希一个库全搞定⚡统一接口设计所有哈希算法都实现同一个Hash接口定义见 hash.cj换个算法只改一个类名底层安全可靠基于 openHiTLS 实现符合密码学标准规范多算法覆盖MD5、SHA1~SHA512、SM3、HMAC 一应俱全源码按模块划分结构一目了然hicrypto └─src ├─crypto │ ├─hash # 哈希算法SM3 在这里 │ ├─mac # 消息认证码HMAC │ └─key # 加解密算法SM2 在这里 └─test # 测试用例最好的学习材料环境准备三步搭好开发环境动手前先准备好三样东西缺一不可安装并配置openHiTLSHiCrypto 的底层密码引擎需要头文件在/usr/local/include/hitls/下安装仓颉 SDK编译器要求 1.0.0 或更高版本见 cjpm.toml 中的cjc-version配置stdx包路径代码中要用到stdx.encoding.hex做十六进制转换然后克隆仓库并构建git clone https://gitcode.com/Cangjie-TPC/hicrypto cd hicrypto ./build_linux.sh构建脚本 build_linux.sh 做了两件事先用 gcc 编译 FFI 动态库libffiKeys.so再用cjpm build编译仓颉代码。编译完成后二进制产物位于target/release/hicrypto。 小贴士cjpm.toml 中配置了link-option -L /usr/local/lib -l hitls_crypto所以 openHiTLS 的库文件必须安装在/usr/local/lib。导入依赖两行代码接入 HiCrypto在自己的工程cjpm.toml中声明二进制依赖[target.x86_64-unknown-linux-gnu] [target.x86_64-unknown-linux-gnu.bin-dependencies] path-option [.hicrypto/target/release/hicrypto] # 替换成自己编译的路径再在源码中导入对应模块import hicrypto.crypto.hash.* // 哈希算法SM3 import hicrypto.crypto.key.* // 密钥与签名SM2 import stdx.encoding.hex.* // 十六进制编码SM3 哈希一行代码算出国密摘要SM3 是国密标准中的杂凑算法输出 32 字节256 位哈希值块大小 64 字节。HiCrypto 的 sm3.cj 封装了它对外只暴露write、finish、reset三个方法。最简洁的用法是digest便捷函数——一行算出结果let str: String helloworld let md: ArrayByte digest(SM3(), str.toArray()) println(toHexString(md)) // 输出c70c5f73da4e8b8b73478af54241469566f6497e16c053a03a0170fa00078283这个结果与官方测试用例 test_crypto_hash.cj#L183 中的期望值完全一致可以直接拿来验证你的环境是否正确。如果数据比较大比如整个文件推荐用流式写法先write分块数据最后finish()出结果中途还可以reset()复用同一实例继续算下一条数据——helloworld分两次写入的哈希与一次性写入helloworld完全相同这一点在 test_crypto_hash.cj#L75-L92 的拼接测试里得到了验证。SM2 签名验签实战给数据盖上防伪章SM2 是国密椭圆曲线算法签名验签的分工很明确私钥签名公钥验签。HiCrypto 在 sm2.cj 中用两个类实现了这套流程都继承自统一的Key接口key.cj。第一步生成密钥对并持久化var privKey SM2PrivateKey() // 生成 SM2 私钥 let pubKey SM2PublicKey(privKey) // 从私钥导出公钥 let pemStr privKey.encodeToPem() // 私钥导出为 PEM 字符串 // 验签方只需保存公钥pubKey.encodeToPem() // 下次使用时用 SM2PrivateKey.decodeFromPem(pemStr) 加载回来encodeToPem/decodeFromPem这对方法让密钥可以安全地存入文件或配置测试文件 test_crypto_sm2.cj#L64-L81 就演示了导出 PEM → 重新导入 → 继续解密的完整闭环。第二步签名与验签各一行代码let data: ArrayByte helloworld.toArray() let sig privKey.sign(data) // ① 私钥签名 let ok pubKey.verify(data, sig) // ② 公钥验签返回 Bool println(ok) // true这段逻辑与官方测试用例 test_crypto_sm2.cj#L55-L62 中的test_sm2_sig完全对应。两个值得注意的细节✍️sign内部自动使用 SM3 做摘要代码里传入了SM3_ID符合国密 SM2 签名规范你无需手动先算哈希✅verify验签失败时不会抛异常而是安静地返回false见 sm2.cj#L359-L375业务代码只需判断布尔值即可一个典型的文件完整性校验场景就是这样A 方用私钥对文件字节签名并随文件分发B 方用公钥验签true则说明文件来源可信且未被篡改。常见坑与排查指南现象原因与解决构建报链接错误openHiTLS 没装到/usr/local检查hitls_crypto库和头文件路径write failed异常对已finish()的实例继续写入会抛CryptoException需要reset()或新建实例哈希对不上确认用的是字节数组str.toArray()而非字符串本身对比 src/test/test_crypto_hash.cj 中的标准答案所有密码学异常都统一抛出自定义异常CryptoException定义见 exception.cj错误信息里带有 openHiTLS 的 errCode排查时可以直接对照。参考文档与更多探索完整 API 说明doc/api.md包含 SM3、SM2、HMAC 全部方法签名哈希用法示例test_crypto_hash.cjSM2 加解密与密钥管理test_crypto_sm2.cj版本演进记录CHANGELOG.mdSM2 其实还支持加密解密encrypt/decrypt配合 HMAC-SM3 做消息认证国密全家桶已经备齐。现在打开仓库跑一遍测试用例你的仓颉国密之旅就正式开始了 【免费下载链接】hicryptoHiCrypto是一个基于Cangjie语言开发的密码学库底层密码密码套件使用了华为公司自研的 openHiTls, 提供高效、敏捷的全场景开源密码学开发套件项目地址: https://gitcode.com/Cangjie-TPC/hicrypto创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

react-i18next 测试实战指南:基于 Jest 与 Testing Library 的 example/test-jest 全解

react-i18next 测试实战指南:基于 Jest 与 Testing Library 的 example/test-jest 全解

react-i18next 测试实战指南:基于 Jest 与 Testing Library 的 example/test-jest 全解 【免费下载链接】react-i18next Internationalization for react done right. Using the i18next i18n ecosystem. 项目地址: https://gitcode.com/gh_mirrors/re/react-i18n…

2026/9/24 14:33:53 阅读更多 →
AbMole 抑制剂篇丨 Belumosudil(KD025,SLx-2119):选择性 ROCK2 抑制剂,在免疫平衡与纤维化机制研究中的应用

AbMole 抑制剂篇丨 Belumosudil(KD025,SLx-2119):选择性 ROCK2 抑制剂,在免疫平衡与纤维化机制研究中的应用

Belumosudil(KD025,SLx-2119,AbMole,M9209)是口服有效的 Rho 相关卷曲螺旋蛋白激酶 2(ROCK2)选择性抑制剂。ROCK1 与 ROCK2 是 Rho GTP 酶下游的丝氨酸/苏氨酸激酶,调控细胞骨架动力…

2026/9/24 14:33:53 阅读更多 →
openJiuwen Agent Store 进阶实战:用 TomatoReviewer 多智能体架构打造 PEP 驱动的 Python 代码审查工具

openJiuwen Agent Store 进阶实战:用 TomatoReviewer 多智能体架构打造 PEP 驱动的 Python 代码审查工具

openJiuwen Agent Store 进阶实战:用 TomatoReviewer 多智能体架构打造 PEP 驱动的 Python 代码审查工具 【免费下载链接】agent-store openJiuwen agent-store承载基于openJiuwen构建的智能体,欢迎各路英豪发挥想象力,积极贡献 项目地址: …

2026/9/25 14:56:49 阅读更多 →

最新新闻

实战案例:Agent Sprite Forge 打造 Unity WebGL 生存类小游戏全流程

实战案例:Agent Sprite Forge 打造 Unity WebGL 生存类小游戏全流程

实战案例:Agent Sprite Forge 打造 Unity WebGL 生存类小游戏全流程 【免费下载链接】agent-sprite-forge Agent Skill for generating 2D sprite sheets and map, transparent PNG frames, and animated GIFs from prompts. 项目地址: https://gitcode.com/gh_mi…

2026/9/25 16:55:20 阅读更多 →
Minitron剪枝工作流:Model Optimizer把LLM参数量砍掉40%的全流程

Minitron剪枝工作流:Model Optimizer把LLM参数量砍掉40%的全流程

Minitron剪枝工作流:Model Optimizer把LLM参数量砍掉40%的全流程 【免费下载链接】Model-Optimizer A unified library of SOTA model optimization techniques like quantization, distillation, pruning, neural architecture search, speculative decoding, etc.…

2026/9/25 16:55:20 阅读更多 →
FlexGen 仓库视角下的 Transformers Flax 语言模型预训练实战:从零训练 RoBERTa、GPT-2、T5 与 BART

FlexGen 仓库视角下的 Transformers Flax 语言模型预训练实战:从零训练 RoBERTa、GPT-2、T5 与 BART

推理引擎大模型 【免费下载链接】FlexGen Running large language models on a single GPU for throughput-oriented scenarios. 项目地址: https://gitcode.com/gh_mirrors/fl/FlexGen 点击查看 免费下载 本篇技术指南以 benchmark/third_party/transformers/exam…

2026/9/25 16:55:20 阅读更多 →
基于 Hugging Face Transformers 在 MM-IMDb 上微调多模态双 Transformer(MMBT)分类模型实战指南

基于 Hugging Face Transformers 在 MM-IMDb 上微调多模态双 Transformer(MMBT)分类模型实战指南

推理引擎大模型 【免费下载链接】FlexGen Running large language models on a single GPU for throughput-oriented scenarios. 项目地址: https://gitcode.com/gh_mirrors/fl/FlexGen 点击查看 免费下载 本文以当前仓库中 mm-imdb 示例目录 的官方 README 为核心…

2026/9/25 16:55:20 阅读更多 →
React Native Skia 阴影滤镜实战:用 Shadow 组件实现投影、内阴影与拟物化设计

React Native Skia 阴影滤镜实战:用 Shadow 组件实现投影、内阴影与拟物化设计

图形学移动开发跨平台UI组件 【免费下载链接】react-native-skia High-performance React Native Graphics using Skia 项目地址: https://gitcode.com/gh_mirrors/re/react-native-skia 点击查看 免费下载 Shadow(DropShadow)是 React Nati…

2026/9/25 16:55:20 阅读更多 →
OS第二章随手记(2.1)

OS第二章随手记(2.1)

目录 一、进程阻塞的过程 二、阻塞队列 三、对时钟中断与中断的思考🤔 四、虚拟地址的思考 五、保存程序状态 六、int 0x80 的思考 七、中断源 八、陷入机制 九、MMU的简略描述 十、王道题目知识点总结 一、进程阻塞的过程 进程调用了一个系统调用函数去访…

2026/9/25 16:54:19 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/25 11:15:26 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →