GGitCodeLTDJfix readme
cc35aa51创建于 2024年7月31日历史提交

pbkdf2

介绍

基于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编译

  1. 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
    
  2. 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编译

  1. linux x86_64 编译

    将上面生成文件 libcrypto.so,放入根目录的 lib 文件夹下,之后执行

    ./build_linux.sh
    
  2. 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,欢迎参与任何形式的贡献。