介绍
基于OPENSSL实现的,用于生成PBKDF2密钥的工具。
软件架构
源码目录
.
├── README.md #整体介绍
├── doc #文档目录,包括设计文档,API接口文档等
│ ├── design.md #设计文档
│ └── feature_api.md #特性接口文档
├── src #源码目录
│ └── pbkdf2 #pbkdf2实现
└── test #测试代码目录
| ├── HLT
| └── LLT
│── build_linux.sh
│── build_win.sh
│── cjpm.toml
│── LICENSE
doc存放库的设计文档、使用文档src存放仓颉源码test存放测试用例
接口说明
主要类和函数接口说明,详见 API
使用说明
编译构建
前提:参考 https://github.com/openssl/openssl 官网安装 openssl,版本推荐 OpenSSL 3.0.7 或更高版本。
本项目提供 libcrypto.so 直接获取地址 https://gitee.com/HW-PLLab/ci_lib/tree/lib_crypto4cj,若没有权限获取需自行编译,方式参考如下:
openssl编译
-
linux x86_64 编译
进入openssl根目录,执行下面语句
sed -i "s/sub shlibext.*shared_extension\}$/sub shlibext \{ \$target\{shared_extension\} || '.so' \}/" Configurations/platform/Unix.pm && sed -i '/ ||/,/ $x; \}/d' Configurations/platform/Unix.pm ./config no-asm no-dso make -
Windows编译
用mysys2进入openssl根目录,执行下面语句
sed -i '/sub sharedname /{n;s/,$/);/;}' Configurations/platform/mingw.pm && sed -i '/ "-",/,/""));/d' Configurations/platform/mingw.pm ./Configure mingw64 no-asm no-dso make或直接获取制作好的对应版本的.exe可执行文件来安装openssl,然后到安装根目录的/bin下获取。
pbkdf2编译
-
linux x86_64 编译
将上面生成文件
libcrypto.so,放入根目录的lib文件夹下,之后执行./build_linux.sh -
windows x64 编译
将上面生成文件
libcrypto.dll,放入根目录的lib文件夹下,之后执行./build_win.sh
编译后得到的一系列文件放在 target/release/pbkdf2 下,根据需要取用,也可以直接将编译后得到的一系列so(dll)文件拷贝到本地cangjie的LD_LIBRARY_PATH下。以下给出一个编译示例:
cjc --import-path /[path]/pbkdf2/target/release -L /[path]/pbkdf2/target/release/pbkdf2 -lcrypto -lpbkdf2_pbkdf2 /.../xxx.cj -O2 -o /[path]/pbkdf2/target/release/pbkdf2/xxx
其中的path是下载本库的本地路径。之后到可执行文件所在的目录下运行可执行文件即可。
功能示例
PBKDF2加密功能示例
通过 PBKDF2.key 方法,基于不同加密算法生成 PBKDF2 密钥。
示例代码如下:
from pbkdf2 import pbkdf2.*
from encoding import hex.*
from crypto import keys.*
from crypto import digest.*
main () {
var key = PBKDF2.key({ => SHA512()}, "password".toArray(), "123456".toArray(), 1000, 16)
println(toHexString(key))
key = PBKDF2.key({ => SHA256()}, "password".toArray(), "123456".toArray(), 1000, 16)
println(toHexString(key))
}
执行结果如下:
41daf57a257f11d162b77bdf358a3543
e4f84f342caf24895bea5d3b0f0640de
约束与限制
NA
开源协议
本项目基于 Apache-2.0 License , 请自由的享受和参与开源。
参与贡献
欢迎给我们提交PR,欢迎给我们提交Issue,欢迎参与任何形式的贡献。