我正在使用 MongoDB 用戶端字段層級加密來加密和解密資料。但是,我注意到每次執行程式時,原始二進位金鑰都會變更。這使得我很難檢索以前加密的數據,因為我無法使用新密鑰對其進行解密。
有沒有辦法在 MongoDB 中維護客戶端欄位級加密的一致加密金鑰?如果可以,我該怎麼做?
https://www.mongodb.com/docs/manual/core/csfle/fundamentals/manual-encryption/#std-label-csfle-fundamentals-manual-encryption
https://go.dev/play/p/6W8e0OiPV2L
我正在嘗試在 MongoDB 社群專案中實作客戶端欄位級加密,以便在將文件中的某些欄位儲存到資料庫之前對其進行加密,然後在從資料庫檢索它們時對其進行解密。
我一直在關注 MongoDB 文檔,並且能夠在第一次執行程式時成功加密和解密資料。但是,我注意到每次再次運行程式時密鑰都會發生變化,並且我想保持密鑰不變。
這些行應該被刪除:
// drop the key vault collection in case you created this collection // in a previous run of this application. if err = client.database(keyvaultdb).collection(keyvaultcoll).drop(context.todo()); err != nil { log.fatalf("collection.drop error: %v", err) }
僅當金鑰尚不存在時才需要以下行:
dataKeyID, err := clientEnc.CreateDataKey(context.TODO(), provider, dataKeyOpts) if err != nil { log.Fatalf("CreateDataKey error: %v", err) }
也許先呼叫 clientenc.getkeybyaltname
來檢查金鑰是否存在。
透過說“原始二進位金鑰發生變化”,我認為您的意思是資料加密金鑰 (dek) 發生變化。這是由於儲存 dek 的集合被刪除所致。
請參閱金鑰與金鑰保管庫:
客戶主金鑰 (cmk) 是您用來加密資料加密金鑰 (dek) 的金鑰....
資料加密金鑰 (dek) 是用於加密 mongodb 文件中的欄位的金鑰。您將資料加密金鑰儲存在使用 cmk 加密的 key vault 集合中...
如果您刪除資料加密金鑰 (dek),則使用該 dek 加密的所有欄位將永久無法讀取。
如果您刪除 cmk,則使用該 cmk 加密的 dek 加密的所有欄位將永久無法讀取。
以上是如何在MongoDB客戶端欄位級加密中保持一致的加密金鑰?的詳細內容。更多資訊請關注PHP中文網其他相關文章!