Name | bk-crypto-python-sdk JSON |
Version |
1.1.1
JSON |
| download |
home_page | |
Summary | bk-crypto-python-sdk is a lightweight cryptography toolkit for Python applications based on Cryptodome / tongsuopy and other encryption libraries. |
upload_time | 2023-08-16 03:31:57 |
maintainer | |
docs_url | None |
author | TencentBlueKing |
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"
}