CnPack 密码算法库
概述
CnPack 密码算法库(CnPack Crypto Library)源于 CnPack 开发组的开源项目 CnVcl 组件包(CnVcl Component Package),是一套以纯 Object Pascal 语言编写的开源加解密源码库,支持 Delphi 5 至最新版本的 RAD Studio,支持 C++Builder 5/6 及 Lazarus/FPC,并支持 32 位与 64 位的 Windows、MacOS、Linux 等操作系统。
CnPack 密码算法库致力于提供强大的加解密算法支持与数据安全保障。它覆盖了国内外常见的加解密算法及中国国家商用密码算法,包括对称加密、非对称加密、杂凑(或名散列、摘要、哈希)等大类及众多其他基础与辅助功能。
许可协议
CnPack 开发包以开放源码(Open Source)的形式发布,遵守 CnPack 的许可协议,受 CnPack 许可协议的保护。License 文件中有该协议的详细描述,具体内容可参考协议文件。
主要内容
-
对称加密:SM4、AES、DES、3DES、RC4、ChaCha20、TEA、ZUC
-
非对称加密:RSA、ECC 椭圆曲线(魏尔斯特拉斯曲线,包括 SM2)、25519/448 椭圆曲线(蒙哥马利及扭曲爱德华曲线)
-
杂凑:SM3、MD5、SHA1、SHA2/SHA3 系列(192、256、384、512)、SHAKE、CRC8/16/32/64、Poly1305、FNV、一次性杂凑签名算法 OTS
-
其他密码学领域:SM9、同态加密、协同加密、格密码、NTRU
-
编码解码:Base64、ASN.1(DER/BER)
-
CA证书:RSA/ECC 证书申请、签发与校验
-
大数支持:大整数、大有理数、大浮点数、一元大数多项式、二元大数多项式、一元大有理数分式
-
运算支持:素数运算、浮点复数运算、位运算、矩阵运算、离散傅立叶变换、128 位整型支持
-
其他:关联数据认证加密、动态口令 OTP、密钥派生 KDF、秘密共享的 Shamir 门限方案及 Feldman VSS 方案
国密支持
CnPack 密码算法库对中国国家商用密码算法标准有着完整而强大的支持:
-
SM2:GM/T 0003.x-2012《SM2椭圆曲线公钥密码算法》,1~5
-
SM3:GM/T 0004-2012《SM3密码杂凑算法》
-
SM4:GM/T 0002-2012《SM4分组密码算法》
-
SM9:GM/T 0044-2016《SM9 标识密码算法》
-
ZUC:GM/T 0001.x-2012《祖冲之序列密码算法》,1~3
另外也包括 OTP:《GB/T 38556-2020 信息安全技术动态口令密码应用技术规范》。
安装与使用
获取源码
有两种途径可获取最新版的 CnPack 密码算法库。第一种途径是 CnPack 网站上下载或 gitee 上直接拉取。第二种途径是 CnPack 网站上下载或 github 上拉取下载最新的 CnVcl 源码包,在 Windows 系统中解压后运行 cnvcl/GenCrypto.bat,即可在 cnvcl 的同级目录下生成 cncrypto 目录,内有 CnPack 密码算法库所有源码。日常 CnPack 密码算法库也是自 CnVcl 中维护再同步的。
编译引入
CnPack 密码算法库不涉及 VCL/FMX 界面组件,仅是基础库的形式提供,因而可直接将 cncrypto/Source 目录加入 Delphi 的工程搜索路径,便可直接在工程中 uses 相应单元并调用。
另外 CnPack 密码算法库也提供了运行期包的形式,在任一版本 Delphi 中打开 cncrypto/Package/CnCrypto.dpk,即可编译成 BPL 使用。
注:如果在 Delphi 5 下编译 BPL,需手工将 requires 语句中的 vcl 改为 vcl50。
测试用例
cncryptoTest 目录下有一完整的命令行测试用例 CryptoTest.dpr,使用任一版本 Delphi 打开运行即可覆盖验证 CnPack 密码算法库的绝大多数功能,或用 C++Builder 5/6 打开 Crypto.bpr、或用 Lazarus 打开 Crypto.lpi,均同样可以运行。尾部两个用例耗时较长以小时计,跑时需有耐心。
关于我们
CnPack 开发组由互联网上热爱 Delphi/C++Builder 程序开发的一群中国程序员自愿者自发组成,其目标是开发中国人自己的真正优秀的第三方免费开源产品。
网站:https://www.cnpack.org
邮件:master@cnpack.org
微信公众号:CnPack开发组 |