You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GridDB结合Python cryptography存储加密数据时类型错误咨询

GridDB中处理加密二进制数据的解决方案

问题根源

你遇到的TypeError是因为:Fernet加密生成的是bytes类型数据,但你用GridDB的STRING类型存储时,系统会自动将bytes转成字符串(默认UTF-8编码);检索时拿到的是str类型,而Fernet的decrypt()方法必须接收bytes类型参数,因此触发错误。

更合理的做法是用GridDB专门的BINARY类型存储加密二进制数据,而非STRING类型,这样能避免不必要的编码转换。

修复步骤

  • 修改容器列类型:将data列的类型从griddb.Type.STRING改为griddb.Type.BINARY
  • 存储数据:直接存入Fernet加密后的bytes数据,无需额外转换
  • 检索数据:直接获取BINARY类型对应的bytes数据,传入decrypt()方法即可

修正后的完整代码

from cryptography.fernet import Fernet
import griddb_python as griddb

# 生成加密密钥
key = Fernet.generate_key()
cipher_suite = Fernet(key)

# 加密示例数据
data = "Quantum Safe Data"
encrypted_data = cipher_suite.encrypt(data.encode())

# 初始化GridDB连接
factory = griddb.StoreFactory.get_instance()
try:
    gridstore = factory.get_store(
        host="localhost", port=10001, cluster_name="defaultCluster",
        username="admin", password="admin"
    )
    container_name = "quantum_test"
    conInfo = griddb.ContainerInfo(
        name=container_name,
        column_info_list=[["id", griddb.Type.INTEGER],
                          ["data", griddb.Type.BINARY]],  # 改为BINARY类型
        type=griddb.ContainerType.COLLECTION, row_key=True)
    
    container = gridstore.put_container(conInfo)
    container.set_auto_commit(False)

    # 存储加密数据(直接传入bytes)
    row = [1, encrypted_data]
    container.put_row(row)
    container.commit()

    # 检索并解密数据
    query = container.query("select *")
    rs = query.fetch()
    while rs.has_next():
        row = rs.next()
        # 直接用row[1](bytes类型)解密
        decrypted_data = cipher_suite.decrypt(row[1]).decode()
        print("Decrypted Data:", decrypted_data)

except griddb.GSException as e:
    print("GridDB Error:", e)

额外说明

GridDB的BINARY类型专为存储二进制数据设计,不会对数据进行任何编码或转换,能完整保留加密数据的原始字节结构,是存储加密内容、文件片段等二进制数据的最优选择。如果坚持使用STRING类型,也可以在存储时将bytes转成base64字符串,检索时再转回bytes,但这种方式会增加数据体积,不如直接用BINARY类型高效。

内容的提问来源于stack exchange,提问作者Hassan Ubaid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 12:45:05