bk-crypto-python-sdk


Namebk-crypto-python-sdk JSON
Version 1.1.1 PyPI version JSON
download
home_page
Summarybk-crypto-python-sdk is a lightweight cryptography toolkit for Python applications based on Cryptodome / tongsuopy and other encryption libraries.
upload_time2023-08-16 03:31:57
maintainer
docs_urlNone
authorTencentBlueKing
requires_python>=3.6.2,<3.11
license
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # BlueKing crypto-python-sdk

---

![Python](https://badgen.net/badge/python/%3E=3.6.2,%3C3.11/green?icon=github)
![Django](https://badgen.net/badge/django/%3E=3.1.5,%3C=4.2.1/yellow?icon=github)
[![License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat)](LICENSE.txt)

![Release](https://badgen.net/github/release/TencentBlueKing/crypto-python-sdk)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/TencentBlueKing/crypto-python-sdk/pulls)

[![Publish to Pypi](https://github.com/TencentBlueKing/crypto-python-sdk/actions/workflows/release.yml/badge.svg)](https://github.com/TencentBlueKing/crypto-python-sdk/actions/workflows/release.yml)

[(English Documents Available)](https://github.com/TencentBlueKing/crypto-python-sdk/blob/main/readme_en.md)

## Overview

️🔧 BlueKing crypto-python-sdk 是一个基于 pyCryptodome / tongsuopy 等加密库的轻量级密码学工具包,为 Python 应用统一的加解密实现,
便于项目在不同的加密方式之间进行无侵入切换

## Features

* [Basic] 提供加密统一抽象层,对接 Cryptodome / tongsuopy 等加密库,提供统一的加解密实现
* [Basic] 支持国际主流密码学算法:AES、RSA
* [Basic] 支持中国商用密码学算法:SM2、SM4
* [Basic] 非对称加密支持 CBC、CTR、GCM、CFB 作为块密码模式
* [Contrib] Django Support,集成 Django settings、ModelField

## Getting started

### Installation

```bash
$ pip install bk-crypto-python-sdk
```

### Usage

> 更多用法参考:[使用文档](https://github.com/TencentBlueKing/crypto-python-sdk/blob/main/docs/usage.md)

#### 1. 基础用法

**非对称加密**

````python
from bkcrypto import constants
from bkcrypto.asymmetric import options
from bkcrypto.asymmetric.ciphers import BaseAsymmetricCipher
from bkcrypto.contrib.basic.ciphers import get_asymmetric_cipher

asymmetric_cipher: BaseAsymmetricCipher = get_asymmetric_cipher(
    cipher_type=constants.AsymmetricCipherType.SM2.value,
    # 传入 None 将随机生成密钥,业务可以根据场景选择传入密钥或随机生成
    cipher_options={
        constants.AsymmetricCipherType.SM2.value: options.SM2AsymmetricOptions(
            private_key_string=None
        ),
        constants.AsymmetricCipherType.RSA.value: options.SM2AsymmetricOptions(
            private_key_string=None
        ),
    }
)

# 加解密
assert "123" == asymmetric_cipher.decrypt(asymmetric_cipher.encrypt("123"))
# 验签
assert asymmetric_cipher.verify(plaintext="123", signature=asymmetric_cipher.sign("123"))
````

**对称加密**

```python
import os

from bkcrypto import constants
from bkcrypto.symmetric.ciphers import BaseSymmetricCipher
from bkcrypto.contrib.basic.ciphers import get_symmetric_cipher

symmetric_cipher: BaseSymmetricCipher = get_symmetric_cipher(
    cipher_type=constants.SymmetricCipherType.SM4.value,
    common={"key": os.urandom(16)},
)
assert "123" == symmetric_cipher.decrypt(symmetric_cipher.encrypt("123"))
```

#### 2. 结合 Django 使用

在 Django Settings 中配置加密算法类型

```python
from bkcrypto import constants

BKCRYPTO = {
    # 声明项目所使用的非对称加密算法
    "ASYMMETRIC_CIPHER_TYPE": constants.AsymmetricCipherType.SM2.value,
    # 声明项目所使用的对称加密算法
    "SYMMETRIC_CIPHER_TYPE": constants.SymmetricCipherType.SM4.value,
}
```

**非对称加密**

```python
from bkcrypto.asymmetric.ciphers import BaseAsymmetricCipher
from bkcrypto.contrib.django.ciphers import get_asymmetric_cipher

asymmetric_cipher: BaseAsymmetricCipher = get_asymmetric_cipher()

# 加解密
assert "123" == asymmetric_cipher.decrypt(asymmetric_cipher.encrypt("123"))
# 验签
assert asymmetric_cipher.verify(plaintext="123", signature=asymmetric_cipher.sign("123"))
```

**对称加密**

```python
from bkcrypto.symmetric.ciphers import BaseSymmetricCipher
from bkcrypto.contrib.django.ciphers import get_symmetric_cipher

symmetric_cipher: BaseSymmetricCipher = get_symmetric_cipher()
assert "123" == symmetric_cipher.decrypt(symmetric_cipher.encrypt("123"))
```

#### 3. 使用 Django CipherManager

在 Django Settings 中配置加密算法类型

```python
from bkcrypto import constants
from bkcrypto.symmetric.options import AESSymmetricOptions, SM4SymmetricOptions
from bkcrypto.asymmetric.options import RSAAsymmetricOptions, SM2AsymmetricOptions

BKCRYPTO = {
    # 声明项目所使用的非对称加密算法
    "ASYMMETRIC_CIPHER_TYPE": constants.AsymmetricCipherType.SM2.value,
    # 声明项目所使用的对称加密算法
    "SYMMETRIC_CIPHER_TYPE": constants.SymmetricCipherType.SM4.value,
    "SYMMETRIC_CIPHERS": {
        # default - 所配置的对称加密实例,根据项目需要可以配置多个
        "default": {
            # 可选,用于在 settings 没法直接获取 key 的情况
            # "get_key_config": "apps.utils.encrypt.key.get_key_config",
            # 可选,用于 ModelField,加密时携带该前缀入库,解密时分析该前缀并选择相应的解密算法
            # ⚠️ 前缀和 cipher type 必须一一对应,且不能有前缀匹配关系
            # "db_prefix_map": {
            #     SymmetricCipherType.AES.value: "aes_str:::",
            #     SymmetricCipherType.SM4.value: "sm4_str:::"
            # },
            # 公共参数配置,不同 cipher 初始化时共用这部分参数
            "common": {"key": "your key"},
            "cipher_options": {
                constants.SymmetricCipherType.AES.value: AESSymmetricOptions(key_size=16),
                # 蓝鲸推荐配置
                constants.SymmetricCipherType.SM4.value: SM4SymmetricOptions(mode=constants.SymmetricMode.CTR)
            }
        },
    },
    "ASYMMETRIC_CIPHERS": {
        # 配置同 SYMMETRIC_CIPHERS
        "default": {
            "common": {"public_key_string": "your key"},
            "cipher_options": {
                constants.AsymmetricCipherType.RSA.value: RSAAsymmetricOptions(
                    padding=constants.RSACipherPadding.PKCS1_v1_5
                ),
                constants.AsymmetricCipherType.SM2.value: SM2AsymmetricOptions()
            },
        },
    }
}
```

**非对称加密**

使用 `asymmetric_cipher_manager` 获取 `BKCRYPTO.ASYMMETRIC_CIPHERS` 配置的 `cipher`

```python
from bkcrypto.asymmetric.ciphers import BaseAsymmetricCipher
from bkcrypto.contrib.django.ciphers import asymmetric_cipher_manager

asymmetric_cipher: BaseAsymmetricCipher = asymmetric_cipher_manager.cipher(using="default")

# 加解密
assert "123" == asymmetric_cipher.decrypt(asymmetric_cipher.encrypt("123"))
# 验签
assert asymmetric_cipher.verify(plaintext="123", signature=asymmetric_cipher.sign("123"))
```

**对称加密**

使用 `symmetric_cipher_manager` 获取 `BKCRYPTO.SYMMETRIC_CIPHERS` 配置的 `cipher`

```python
from bkcrypto.symmetric.ciphers import BaseSymmetricCipher
from bkcrypto.contrib.django.ciphers import symmetric_cipher_manager

# using - 指定对称加密实例,默认使用 `default`
symmetric_cipher: BaseSymmetricCipher = symmetric_cipher_manager.cipher(using="default")
assert "123" == symmetric_cipher.decrypt(symmetric_cipher.encrypt("123"))
```

**Django ModelField**

```python
from django.db import models
from bkcrypto.contrib.django.fields import SymmetricTextField


class IdentityData(models.Model):
    password = SymmetricTextField("密码", blank=True, null=True)
```


## Roadmap

- [版本日志](https://github.com/TencentBlueKing/crypto-python-sdk/blob/main/release.md)

## Support

- [蓝鲸论坛](https://bk.tencent.com/s-mart/community)
- [蓝鲸 DevOps 在线视频教程](https://bk.tencent.com/s-mart/video/)
- [蓝鲸社区版交流群](https://jq.qq.com/?_wv=1027&k=5zk8F7G)

## BlueKing Community

- [BK-CMDB](https://github.com/Tencent/bk-cmdb):蓝鲸配置平台(蓝鲸 CMDB)是一个面向资产及应用的企业级配置管理平台。
- [BK-CI](https://github.com/Tencent/bk-ci):蓝鲸持续集成平台是一个开源的持续集成和持续交付系统,可以轻松将你的研发流程呈现到你面前。
- [BK-BCS](https://github.com/Tencent/bk-bcs):蓝鲸容器管理平台是以容器技术为基础,为微服务业务提供编排管理的基础服务平台。
- [BK-PaaS](https://github.com/Tencent/bk-paas):蓝鲸 PaaS 平台是一个开放式的开发平台,让开发者可以方便快捷地创建、开发、部署和管理
  SaaS 应用。
- [BK-SOPS](https://github.com/Tencent/bk-sops):标准运维(SOPS)是通过可视化的图形界面进行任务流程编排和执行的系统,是蓝鲸体系中一款轻量级的调度编排类
  SaaS 产品。
- [BK-JOB](https://github.com/Tencent/bk-job) 蓝鲸作业平台(Job)是一套运维脚本管理系统,具备海量任务并发处理能力。

## Contributing

如果你有好的意见或建议,欢迎给我们提 Issues 或 Pull Requests,为蓝鲸开源社区贡献力量。   
[腾讯开源激励计划](https://opensource.tencent.com/contribution) 鼓励开发者的参与和贡献,期待你的加入。

## License

基于 MIT 协议, 详细请参考 [LICENSE](https://github.com/TencentBlueKing/crypto-python-sdk/blob/main/LICENSE.txt)

            

Raw data

            {
    "_id": null,
    "home_page": "",
    "name": "bk-crypto-python-sdk",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.6.2,<3.11",
    "maintainer_email": "",
    "keywords": "",
    "author": "TencentBlueKing",
    "author_email": "contactus_bk@tencent.com",
    "download_url": "https://files.pythonhosted.org/packages/b4/c8/f7460ceb26038a29c35624eeaa30a1ff6f89797f08d2324c9fefbd0365a9/bk-crypto-python-sdk-1.1.1.tar.gz",
    "platform": null,
    "description": "# BlueKing crypto-python-sdk\n\n---\n\n![Python](https://badgen.net/badge/python/%3E=3.6.2,%3C3.11/green?icon=github)\n![Django](https://badgen.net/badge/django/%3E=3.1.5,%3C=4.2.1/yellow?icon=github)\n[![License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat)](LICENSE.txt)\n\n![Release](https://badgen.net/github/release/TencentBlueKing/crypto-python-sdk)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/TencentBlueKing/crypto-python-sdk/pulls)\n\n[![Publish to Pypi](https://github.com/TencentBlueKing/crypto-python-sdk/actions/workflows/release.yml/badge.svg)](https://github.com/TencentBlueKing/crypto-python-sdk/actions/workflows/release.yml)\n\n[(English Documents Available)](https://github.com/TencentBlueKing/crypto-python-sdk/blob/main/readme_en.md)\n\n## Overview\n\n\ufe0f\ud83d\udd27 BlueKing crypto-python-sdk \u662f\u4e00\u4e2a\u57fa\u4e8e pyCryptodome / tongsuopy \u7b49\u52a0\u5bc6\u5e93\u7684\u8f7b\u91cf\u7ea7\u5bc6\u7801\u5b66\u5de5\u5177\u5305\uff0c\u4e3a Python \u5e94\u7528\u7edf\u4e00\u7684\u52a0\u89e3\u5bc6\u5b9e\u73b0\uff0c\n\u4fbf\u4e8e\u9879\u76ee\u5728\u4e0d\u540c\u7684\u52a0\u5bc6\u65b9\u5f0f\u4e4b\u95f4\u8fdb\u884c\u65e0\u4fb5\u5165\u5207\u6362\n\n## Features\n\n* [Basic] \u63d0\u4f9b\u52a0\u5bc6\u7edf\u4e00\u62bd\u8c61\u5c42\uff0c\u5bf9\u63a5 Cryptodome / tongsuopy \u7b49\u52a0\u5bc6\u5e93\uff0c\u63d0\u4f9b\u7edf\u4e00\u7684\u52a0\u89e3\u5bc6\u5b9e\u73b0\n* [Basic] \u652f\u6301\u56fd\u9645\u4e3b\u6d41\u5bc6\u7801\u5b66\u7b97\u6cd5\uff1aAES\u3001RSA\n* [Basic] \u652f\u6301\u4e2d\u56fd\u5546\u7528\u5bc6\u7801\u5b66\u7b97\u6cd5\uff1aSM2\u3001SM4\n* [Basic] \u975e\u5bf9\u79f0\u52a0\u5bc6\u652f\u6301 CBC\u3001CTR\u3001GCM\u3001CFB \u4f5c\u4e3a\u5757\u5bc6\u7801\u6a21\u5f0f\n* [Contrib] Django Support\uff0c\u96c6\u6210 Django settings\u3001ModelField\n\n## Getting started\n\n### Installation\n\n```bash\n$ pip install bk-crypto-python-sdk\n```\n\n### Usage\n\n> \u66f4\u591a\u7528\u6cd5\u53c2\u8003\uff1a[\u4f7f\u7528\u6587\u6863](https://github.com/TencentBlueKing/crypto-python-sdk/blob/main/docs/usage.md)\n\n#### 1. \u57fa\u7840\u7528\u6cd5\n\n**\u975e\u5bf9\u79f0\u52a0\u5bc6**\n\n````python\nfrom bkcrypto import constants\nfrom bkcrypto.asymmetric import options\nfrom bkcrypto.asymmetric.ciphers import BaseAsymmetricCipher\nfrom bkcrypto.contrib.basic.ciphers import get_asymmetric_cipher\n\nasymmetric_cipher: BaseAsymmetricCipher = get_asymmetric_cipher(\n    cipher_type=constants.AsymmetricCipherType.SM2.value,\n    # \u4f20\u5165 None \u5c06\u968f\u673a\u751f\u6210\u5bc6\u94a5\uff0c\u4e1a\u52a1\u53ef\u4ee5\u6839\u636e\u573a\u666f\u9009\u62e9\u4f20\u5165\u5bc6\u94a5\u6216\u968f\u673a\u751f\u6210\n    cipher_options={\n        constants.AsymmetricCipherType.SM2.value: options.SM2AsymmetricOptions(\n            private_key_string=None\n        ),\n        constants.AsymmetricCipherType.RSA.value: options.SM2AsymmetricOptions(\n            private_key_string=None\n        ),\n    }\n)\n\n# \u52a0\u89e3\u5bc6\nassert \"123\" == asymmetric_cipher.decrypt(asymmetric_cipher.encrypt(\"123\"))\n# \u9a8c\u7b7e\nassert asymmetric_cipher.verify(plaintext=\"123\", signature=asymmetric_cipher.sign(\"123\"))\n````\n\n**\u5bf9\u79f0\u52a0\u5bc6**\n\n```python\nimport os\n\nfrom bkcrypto import constants\nfrom bkcrypto.symmetric.ciphers import BaseSymmetricCipher\nfrom bkcrypto.contrib.basic.ciphers import get_symmetric_cipher\n\nsymmetric_cipher: BaseSymmetricCipher = get_symmetric_cipher(\n    cipher_type=constants.SymmetricCipherType.SM4.value,\n    common={\"key\": os.urandom(16)},\n)\nassert \"123\" == symmetric_cipher.decrypt(symmetric_cipher.encrypt(\"123\"))\n```\n\n#### 2. \u7ed3\u5408 Django \u4f7f\u7528\n\n\u5728 Django Settings \u4e2d\u914d\u7f6e\u52a0\u5bc6\u7b97\u6cd5\u7c7b\u578b\n\n```python\nfrom bkcrypto import constants\n\nBKCRYPTO = {\n    # \u58f0\u660e\u9879\u76ee\u6240\u4f7f\u7528\u7684\u975e\u5bf9\u79f0\u52a0\u5bc6\u7b97\u6cd5\n    \"ASYMMETRIC_CIPHER_TYPE\": constants.AsymmetricCipherType.SM2.value,\n    # \u58f0\u660e\u9879\u76ee\u6240\u4f7f\u7528\u7684\u5bf9\u79f0\u52a0\u5bc6\u7b97\u6cd5\n    \"SYMMETRIC_CIPHER_TYPE\": constants.SymmetricCipherType.SM4.value,\n}\n```\n\n**\u975e\u5bf9\u79f0\u52a0\u5bc6**\n\n```python\nfrom bkcrypto.asymmetric.ciphers import BaseAsymmetricCipher\nfrom bkcrypto.contrib.django.ciphers import get_asymmetric_cipher\n\nasymmetric_cipher: BaseAsymmetricCipher = get_asymmetric_cipher()\n\n# \u52a0\u89e3\u5bc6\nassert \"123\" == asymmetric_cipher.decrypt(asymmetric_cipher.encrypt(\"123\"))\n# \u9a8c\u7b7e\nassert asymmetric_cipher.verify(plaintext=\"123\", signature=asymmetric_cipher.sign(\"123\"))\n```\n\n**\u5bf9\u79f0\u52a0\u5bc6**\n\n```python\nfrom bkcrypto.symmetric.ciphers import BaseSymmetricCipher\nfrom bkcrypto.contrib.django.ciphers import get_symmetric_cipher\n\nsymmetric_cipher: BaseSymmetricCipher = get_symmetric_cipher()\nassert \"123\" == symmetric_cipher.decrypt(symmetric_cipher.encrypt(\"123\"))\n```\n\n#### 3. \u4f7f\u7528 Django CipherManager\n\n\u5728 Django Settings \u4e2d\u914d\u7f6e\u52a0\u5bc6\u7b97\u6cd5\u7c7b\u578b\n\n```python\nfrom bkcrypto import constants\nfrom bkcrypto.symmetric.options import AESSymmetricOptions, SM4SymmetricOptions\nfrom bkcrypto.asymmetric.options import RSAAsymmetricOptions, SM2AsymmetricOptions\n\nBKCRYPTO = {\n    # \u58f0\u660e\u9879\u76ee\u6240\u4f7f\u7528\u7684\u975e\u5bf9\u79f0\u52a0\u5bc6\u7b97\u6cd5\n    \"ASYMMETRIC_CIPHER_TYPE\": constants.AsymmetricCipherType.SM2.value,\n    # \u58f0\u660e\u9879\u76ee\u6240\u4f7f\u7528\u7684\u5bf9\u79f0\u52a0\u5bc6\u7b97\u6cd5\n    \"SYMMETRIC_CIPHER_TYPE\": constants.SymmetricCipherType.SM4.value,\n    \"SYMMETRIC_CIPHERS\": {\n        # default - \u6240\u914d\u7f6e\u7684\u5bf9\u79f0\u52a0\u5bc6\u5b9e\u4f8b\uff0c\u6839\u636e\u9879\u76ee\u9700\u8981\u53ef\u4ee5\u914d\u7f6e\u591a\u4e2a\n        \"default\": {\n            # \u53ef\u9009\uff0c\u7528\u4e8e\u5728 settings \u6ca1\u6cd5\u76f4\u63a5\u83b7\u53d6 key \u7684\u60c5\u51b5\n            # \"get_key_config\": \"apps.utils.encrypt.key.get_key_config\",\n            # \u53ef\u9009\uff0c\u7528\u4e8e ModelField\uff0c\u52a0\u5bc6\u65f6\u643a\u5e26\u8be5\u524d\u7f00\u5165\u5e93\uff0c\u89e3\u5bc6\u65f6\u5206\u6790\u8be5\u524d\u7f00\u5e76\u9009\u62e9\u76f8\u5e94\u7684\u89e3\u5bc6\u7b97\u6cd5\n            # \u26a0\ufe0f \u524d\u7f00\u548c cipher type \u5fc5\u987b\u4e00\u4e00\u5bf9\u5e94\uff0c\u4e14\u4e0d\u80fd\u6709\u524d\u7f00\u5339\u914d\u5173\u7cfb\n            # \"db_prefix_map\": {\n            #     SymmetricCipherType.AES.value: \"aes_str:::\",\n            #     SymmetricCipherType.SM4.value: \"sm4_str:::\"\n            # },\n            # \u516c\u5171\u53c2\u6570\u914d\u7f6e\uff0c\u4e0d\u540c cipher \u521d\u59cb\u5316\u65f6\u5171\u7528\u8fd9\u90e8\u5206\u53c2\u6570\n            \"common\": {\"key\": \"your key\"},\n            \"cipher_options\": {\n                constants.SymmetricCipherType.AES.value: AESSymmetricOptions(key_size=16),\n                # \u84dd\u9cb8\u63a8\u8350\u914d\u7f6e\n                constants.SymmetricCipherType.SM4.value: SM4SymmetricOptions(mode=constants.SymmetricMode.CTR)\n            }\n        },\n    },\n    \"ASYMMETRIC_CIPHERS\": {\n        # \u914d\u7f6e\u540c SYMMETRIC_CIPHERS\n        \"default\": {\n            \"common\": {\"public_key_string\": \"your key\"},\n            \"cipher_options\": {\n                constants.AsymmetricCipherType.RSA.value: RSAAsymmetricOptions(\n                    padding=constants.RSACipherPadding.PKCS1_v1_5\n                ),\n                constants.AsymmetricCipherType.SM2.value: SM2AsymmetricOptions()\n            },\n        },\n    }\n}\n```\n\n**\u975e\u5bf9\u79f0\u52a0\u5bc6**\n\n\u4f7f\u7528 `asymmetric_cipher_manager` \u83b7\u53d6 `BKCRYPTO.ASYMMETRIC_CIPHERS` \u914d\u7f6e\u7684 `cipher`\n\n```python\nfrom bkcrypto.asymmetric.ciphers import BaseAsymmetricCipher\nfrom bkcrypto.contrib.django.ciphers import asymmetric_cipher_manager\n\nasymmetric_cipher: BaseAsymmetricCipher = asymmetric_cipher_manager.cipher(using=\"default\")\n\n# \u52a0\u89e3\u5bc6\nassert \"123\" == asymmetric_cipher.decrypt(asymmetric_cipher.encrypt(\"123\"))\n# \u9a8c\u7b7e\nassert asymmetric_cipher.verify(plaintext=\"123\", signature=asymmetric_cipher.sign(\"123\"))\n```\n\n**\u5bf9\u79f0\u52a0\u5bc6**\n\n\u4f7f\u7528 `symmetric_cipher_manager` \u83b7\u53d6 `BKCRYPTO.SYMMETRIC_CIPHERS` \u914d\u7f6e\u7684 `cipher`\n\n```python\nfrom bkcrypto.symmetric.ciphers import BaseSymmetricCipher\nfrom bkcrypto.contrib.django.ciphers import symmetric_cipher_manager\n\n# using - \u6307\u5b9a\u5bf9\u79f0\u52a0\u5bc6\u5b9e\u4f8b\uff0c\u9ed8\u8ba4\u4f7f\u7528 `default`\nsymmetric_cipher: BaseSymmetricCipher = symmetric_cipher_manager.cipher(using=\"default\")\nassert \"123\" == symmetric_cipher.decrypt(symmetric_cipher.encrypt(\"123\"))\n```\n\n**Django ModelField**\n\n```python\nfrom django.db import models\nfrom bkcrypto.contrib.django.fields import SymmetricTextField\n\n\nclass IdentityData(models.Model):\n    password = SymmetricTextField(\"\u5bc6\u7801\", blank=True, null=True)\n```\n\n\n## Roadmap\n\n- [\u7248\u672c\u65e5\u5fd7](https://github.com/TencentBlueKing/crypto-python-sdk/blob/main/release.md)\n\n## Support\n\n- [\u84dd\u9cb8\u8bba\u575b](https://bk.tencent.com/s-mart/community)\n- [\u84dd\u9cb8 DevOps \u5728\u7ebf\u89c6\u9891\u6559\u7a0b](https://bk.tencent.com/s-mart/video/)\n- [\u84dd\u9cb8\u793e\u533a\u7248\u4ea4\u6d41\u7fa4](https://jq.qq.com/?_wv=1027&k=5zk8F7G)\n\n## BlueKing Community\n\n- [BK-CMDB](https://github.com/Tencent/bk-cmdb)\uff1a\u84dd\u9cb8\u914d\u7f6e\u5e73\u53f0\uff08\u84dd\u9cb8 CMDB\uff09\u662f\u4e00\u4e2a\u9762\u5411\u8d44\u4ea7\u53ca\u5e94\u7528\u7684\u4f01\u4e1a\u7ea7\u914d\u7f6e\u7ba1\u7406\u5e73\u53f0\u3002\n- [BK-CI](https://github.com/Tencent/bk-ci)\uff1a\u84dd\u9cb8\u6301\u7eed\u96c6\u6210\u5e73\u53f0\u662f\u4e00\u4e2a\u5f00\u6e90\u7684\u6301\u7eed\u96c6\u6210\u548c\u6301\u7eed\u4ea4\u4ed8\u7cfb\u7edf\uff0c\u53ef\u4ee5\u8f7b\u677e\u5c06\u4f60\u7684\u7814\u53d1\u6d41\u7a0b\u5448\u73b0\u5230\u4f60\u9762\u524d\u3002\n- [BK-BCS](https://github.com/Tencent/bk-bcs)\uff1a\u84dd\u9cb8\u5bb9\u5668\u7ba1\u7406\u5e73\u53f0\u662f\u4ee5\u5bb9\u5668\u6280\u672f\u4e3a\u57fa\u7840\uff0c\u4e3a\u5fae\u670d\u52a1\u4e1a\u52a1\u63d0\u4f9b\u7f16\u6392\u7ba1\u7406\u7684\u57fa\u7840\u670d\u52a1\u5e73\u53f0\u3002\n- [BK-PaaS](https://github.com/Tencent/bk-paas)\uff1a\u84dd\u9cb8 PaaS \u5e73\u53f0\u662f\u4e00\u4e2a\u5f00\u653e\u5f0f\u7684\u5f00\u53d1\u5e73\u53f0\uff0c\u8ba9\u5f00\u53d1\u8005\u53ef\u4ee5\u65b9\u4fbf\u5feb\u6377\u5730\u521b\u5efa\u3001\u5f00\u53d1\u3001\u90e8\u7f72\u548c\u7ba1\u7406\n  SaaS \u5e94\u7528\u3002\n- [BK-SOPS](https://github.com/Tencent/bk-sops)\uff1a\u6807\u51c6\u8fd0\u7ef4\uff08SOPS\uff09\u662f\u901a\u8fc7\u53ef\u89c6\u5316\u7684\u56fe\u5f62\u754c\u9762\u8fdb\u884c\u4efb\u52a1\u6d41\u7a0b\u7f16\u6392\u548c\u6267\u884c\u7684\u7cfb\u7edf\uff0c\u662f\u84dd\u9cb8\u4f53\u7cfb\u4e2d\u4e00\u6b3e\u8f7b\u91cf\u7ea7\u7684\u8c03\u5ea6\u7f16\u6392\u7c7b\n  SaaS \u4ea7\u54c1\u3002\n- [BK-JOB](https://github.com/Tencent/bk-job) \u84dd\u9cb8\u4f5c\u4e1a\u5e73\u53f0(Job)\u662f\u4e00\u5957\u8fd0\u7ef4\u811a\u672c\u7ba1\u7406\u7cfb\u7edf\uff0c\u5177\u5907\u6d77\u91cf\u4efb\u52a1\u5e76\u53d1\u5904\u7406\u80fd\u529b\u3002\n\n## Contributing\n\n\u5982\u679c\u4f60\u6709\u597d\u7684\u610f\u89c1\u6216\u5efa\u8bae\uff0c\u6b22\u8fce\u7ed9\u6211\u4eec\u63d0 Issues \u6216 Pull Requests\uff0c\u4e3a\u84dd\u9cb8\u5f00\u6e90\u793e\u533a\u8d21\u732e\u529b\u91cf\u3002   \n[\u817e\u8baf\u5f00\u6e90\u6fc0\u52b1\u8ba1\u5212](https://opensource.tencent.com/contribution) \u9f13\u52b1\u5f00\u53d1\u8005\u7684\u53c2\u4e0e\u548c\u8d21\u732e\uff0c\u671f\u5f85\u4f60\u7684\u52a0\u5165\u3002\n\n## License\n\n\u57fa\u4e8e MIT \u534f\u8bae\uff0c \u8be6\u7ec6\u8bf7\u53c2\u8003 [LICENSE](https://github.com/TencentBlueKing/crypto-python-sdk/blob/main/LICENSE.txt)\n",
    "bugtrack_url": null,
    "license": "",
    "summary": "bk-crypto-python-sdk is a lightweight cryptography toolkit for Python applications based on Cryptodome / tongsuopy and other encryption libraries.",
    "version": "1.1.1",
    "project_urls": null,
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7eb4ff689d8262e18511157351d5d03472c17e10e9fc11d0b8a5b7f0fe219b89",
                "md5": "bd4ab45753a3aad71955207e622181bc",
                "sha256": "042f1651a927cbf3e3cae2b3c2688b8151d572032e480bff7aa9d96405632c0a"
            },
            "downloads": -1,
            "filename": "bk_crypto_python_sdk-1.1.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "bd4ab45753a3aad71955207e622181bc",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.6.2,<3.11",
            "size": 44932,
            "upload_time": "2023-08-16T03:31:59",
            "upload_time_iso_8601": "2023-08-16T03:31:59.163892Z",
            "url": "https://files.pythonhosted.org/packages/7e/b4/ff689d8262e18511157351d5d03472c17e10e9fc11d0b8a5b7f0fe219b89/bk_crypto_python_sdk-1.1.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b4c8f7460ceb26038a29c35624eeaa30a1ff6f89797f08d2324c9fefbd0365a9",
                "md5": "f117f89047c517af6b81c34907b630bf",
                "sha256": "dee920ca58d402cc203a4cc704993685c626a801ff3c60942ec7c412d6b194b2"
            },
            "downloads": -1,
            "filename": "bk-crypto-python-sdk-1.1.1.tar.gz",
            "has_sig": false,
            "md5_digest": "f117f89047c517af6b81c34907b630bf",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.6.2,<3.11",
            "size": 21375,
            "upload_time": "2023-08-16T03:31:57",
            "upload_time_iso_8601": "2023-08-16T03:31:57.469297Z",
            "url": "https://files.pythonhosted.org/packages/b4/c8/f7460ceb26038a29c35624eeaa30a1ff6f89797f08d2324c9fefbd0365a9/bk-crypto-python-sdk-1.1.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-08-16 03:31:57",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "bk-crypto-python-sdk"
}
        
Elapsed time: 0.09941s