Package: bk-crypto-python-sdk
BlueKing crypto-python-sdk(English Documents Available)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、ModelFieldGetting startedInstallation$pipinstallbk-crypto-python-sdkUsage更多用法参考：使用文档1. 基础用法非对称加密frombkcryptoimportconstantsfrombkcrypto.asymmetricimportoptionsfrombkcrypto.asymmetric.ciphersimportBaseAsymmetricCipherfrombkcrypto.contrib.basic.ciphersimportget_asymmetric_cipherasymmetric_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"))# 验签assertasymmetric_cipher.verify(plaintext="123",signature=asymmetric_cipher.sign("123"))对称加密importosfrombkcryptoimportconstantsfrombkcrypto.symmetric.ciphersimportBaseSymmetricCipherfrombkcrypto.contrib.basic.ciphersimportget_symmetric_ciphersymmetric_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 中配置加密算法类型frombkcryptoimportconstantsBKCRYPTO={# 声明项目所使用的非对称加密算法"ASYMMETRIC_CIPHER_TYPE":constants.AsymmetricCipherType.SM2.value,# 声明项目所使用的对称加密算法"SYMMETRIC_CIPHER_TYPE":constants.SymmetricCipherType.SM4.value,}非对称加密frombkcrypto.asymmetric.ciphersimportBaseAsymmetricCipherfrombkcrypto.contrib.django.ciphersimportget_asymmetric_cipherasymmetric_cipher:BaseAsymmetricCipher=get_asymmetric_cipher()# 加解密assert"123"==asymmetric_cipher.decrypt(asymmetric_cipher.encrypt("123"))# 验签assertasymmetric_cipher.verify(plaintext="123",signature=asymmetric_cipher.sign("123"))对称加密frombkcrypto.symmetric.ciphersimportBaseSymmetricCipherfrombkcrypto.contrib.django.ciphersimportget_symmetric_ciphersymmetric_cipher:BaseSymmetricCipher=get_symmetric_cipher()assert"123"==symmetric_cipher.decrypt(symmetric_cipher.encrypt("123"))3. 使用 Django CipherManager在 Django Settings 中配置加密算法类型frombkcryptoimportconstantsfrombkcrypto.symmetric.optionsimportAESSymmetricOptions,SM4SymmetricOptionsfrombkcrypto.asymmetric.optionsimportRSAAsymmetricOptions,SM2AsymmetricOptionsBKCRYPTO={# 声明项目所使用的非对称加密算法"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配置的cipherfrombkcrypto.asymmetric.ciphersimportBaseAsymmetricCipherfrombkcrypto.contrib.django.ciphersimportasymmetric_cipher_managerasymmetric_cipher:BaseAsymmetricCipher=asymmetric_cipher_manager.cipher(using="default")# 加解密assert"123"==asymmetric_cipher.decrypt(asymmetric_cipher.encrypt("123"))# 验签assertasymmetric_cipher.verify(plaintext="123",signature=asymmetric_cipher.sign("123"))对称加密使用symmetric_cipher_manager获取BKCRYPTO.SYMMETRIC_CIPHERS配置的cipherfrombkcrypto.symmetric.ciphersimportBaseSymmetricCipherfrombkcrypto.contrib.django.ciphersimportsymmetric_cipher_manager# using - 指定对称加密实例，默认使用 `default`symmetric_cipher:BaseSymmetricCipher=symmetric_cipher_manager.cipher(using="default")assert"123"==symmetric_cipher.decrypt(symmetric_cipher.encrypt("123"))Django ModelFieldfromdjango.dbimportmodelsfrombkcrypto.contrib.django.fieldsimportSymmetricTextFieldclassIdentityData(models.Model):password=SymmetricTextField("密码",blank=True,null=True)Roadmap版本日志Support蓝鲸论坛蓝鲸 DevOps 在线视频教程蓝鲸社区版交流群BlueKing CommunityBK-CMDB：蓝鲸配置平台（蓝鲸 CMDB）是一个面向资产及应用的企业级配置管理平台。BK-CI：蓝鲸持续集成平台是一个开源的持续集成和持续交付系统，可以轻松将你的研发流程呈现到你面前。BK-BCS：蓝鲸容器管理平台是以容器技术为基础，为微服务业务提供编排管理的基础服务平台。BK-PaaS：蓝鲸 PaaS 平台是一个开放式的开发平台，让开发者可以方便快捷地创建、开发、部署和管理
SaaS 应用。BK-SOPS：标准运维（SOPS）是通过可视化的图形界面进行任务流程编排和执行的系统，是蓝鲸体系中一款轻量级的调度编排类
SaaS 产品。BK-JOB蓝鲸作业平台(Job)是一套运维脚本管理系统，具备海量任务并发处理能力。Contributing如果你有好的意见或建议，欢迎给我们提 Issues 或 Pull Requests，为蓝鲸开源社区贡献力量。腾讯开源激励计划鼓励开发者的参与和贡献，期待你的加入。License基于 MIT 协议， 详细请参考LICENSE