Docs 主页 → 开发应用程序 → MongoDB Manual
使用显式加密
在此页面上
概述
本指南向您展示如何使用显式加密和 MongoDB 驱动程序来加密文档。
完成本指南后,您应该能够配置驱动程序,使用显式加密对文档中的字段进行加密。 有了这些知识,您应该能够创建使用显式加密的客户端应用程序。具有自动解密功能。
重要
请勿在生产中使用此应用程序
由于此示例应用程序在应用程序的文件系统上存储了加密密钥,因此您可能会遇到未经授权访问该密钥或丢失解密数据的密钥的风险。
要查看演示如何创建使用远程密钥管理系统的启用了 Queryable Encryption 的应用程序的教程,请参阅教程。
开始之前
要完成并运行本指南中的代码,您需要按照安装要求页面中的步骤来设置开发环境。
提示
请参阅:完整应用程序
要查看您在本指南中创建的应用程序的完整代码,请选择与您的首选 MongoDB 驱动程序对应的标签页,然后点击提供的链接:
步骤
创建客户主密钥
您必须创建客户主密钥 ( 客户主密钥 ) 才能执行Queryable Encryption。
创建 96 字节的客户主密钥并将其保存到文件 master-key.txt
中:
openssl rand 96 > master-key.txt
注意
使用编程语言创建客户主密钥
如果您更愿意使用首选编程语言生成 CMK ,则可以在 GitHub 上查看本指南支持的每种语言的演示如何生成客户主密钥的代码片段。
创建你的数据加密密钥和加密collection
读取客户主密钥并指定 KMS 提供商设置
检索您在本指南的创建客户主密钥步骤中生成的客户主密钥文件的内容。
将客户主密钥值传递到您的 KMS 提供商设置。The client uses these settings to discover the CMK. 将提供程序名称设置为local
以通知驱动程序您正在使用本地密钥提供程序。
选择与所需的 MongoDB 驱动程序对应的标签页:
创建数据加密密钥
使用 MongoDB 连接字符串和密钥保管库集合命名空间构建客户端,并创建数据加密密钥:
注意
密钥保管库集合命名空间权限
密钥保管库集合位于encryption.__keyVault
命名空间中。 确保应用程序用于连接到 MongoDB 的数据库用户对此命名空间具有ReadWrite权限。
本节中代码的输出应类似于以下内容:
Created encrypted collection!
提示
请参阅:完整代码
配置 MongoClient 以进行加密读取和写入
检索数据加密密钥
检索在本指南的“创建数据加密密钥”步骤中创建的数据加密密钥:
指定自动加密共享库的路径
提示
了解详情
要了解有关此路径引用的库的更多信息,请参阅用于 Queryable Encryption 的自动加密共享库页面。
创建 MongoClient 对象
使用以下自动加密设置实例化MongoClient
对象:
注意
自动解密
MongoClient
我们使用启用了自动加密的实例来执行自动解密。
要了解有关使用自动解密的显式加密的更多信息,请参阅“基础知识”部分。
插入具有加密字段的文档
使用已启用 Queryable Encryption 的实例MongoClient
,通过以下代码段将加密文档插入到命名空间medicalRecords.patients
中:
插入文档时,启用了 Queryable Encryption 的客户端会对文档的字段进行加密,如下所示:
{ "_id": { "$oid": "6303e36053cc7ec2e6a630bd" }, "firstName": "Jon", "patientId": { "$binary": { "base64": "BxLJUBmg703civqMz8ASsD4QEYeSneOGiiYHfLE77ELEkp1EC/fXPrKCNRQl2mAFddszqDJ0P3znKrq0DVMEvJoU6wa0Ra+U+JjNVr8NtJE+TpTLCannY5Av6iGfLAaiHbM/E8Ftz1YCQsArQwuNp3wIV/GJPLa2662xsyk0wz7F6IRGC3FlnxpN4UIFaHE1M7Y6kEnx3tEy5uJBvU4Sex7I2H0kqHthClH77Q6xHIHc8H9d6upvgnEbkKBCnmc24A2pSG/xZ7LBsV3j5aOboPISuN/lvg==", "subType": "06" } }, "medications": { "$binary": { "base64": "BvOsveapfUxiuQxCMSM2fYIEyRlQaSqR+0NxlMarwurBflvoMz1FrSjSGgCVCpK8X+YrilP6Bac99kkaUmRJfjo4savxcjpOfEnUj5bHciPyfQBYmYF4PMLDtTTzGZpPilb9d5KgpIMBXxHi+dIcog==", "subType": "06" } }, "__safeContent__": [ { "$binary": { "base64": "ZLPIpgxzXpHUGrvdIHetwmMagR+mqvuUj5nzXNGf/WM=", "subType": "00" } } ] }
警告
请勿修改 __safeContent__ 字段
__safeContent__
字段对于 Queryable Encryption 至关重要。请勿修改此字段的内容。
提示
请参阅:完整代码
检索加密文档
通过对加密字段进行查询,检索在本指南的“插入具有加密字段的文档”步骤中插入的加密文档:
上述代码片段的输出应包含以下文档:
{ "__safeContent__": [ { "Subtype": 0, "Data": "LfaIuWm9o30MIGrK7GGUoStJMSNOjRgbxy5q2TPiDes=" } ], "_id": "6303a770857952ca5e363fd2", "firstName": "Jon", "medications": ["Atorvastatin", "Levothyroxine"], "patientId": 12345678 }
提示
请参阅:完整代码
了解详情
要查看有关将 Queryable Encryption 与远程 KMS 结合使用的教程,请参阅教程。
要了解Queryable Encryption的工作原理,请参阅显式加密。
如需详细了解本指南中提到的主题,请参阅以下链接: