sql >> データベース >  >> NoSQL >> MongoDB

c#mongodbへの書き込み/読み取り中にプロパティを暗号化/復号化します

    私の解決策:

    モデル:

    public class Patient
    {
        //comes from the client as XXXXXXXXX, RegEx: "([0-9]{9})"
        public EncryptedString SocialSecurityNumber { get; set; }  
    }
    

    カスタムタイプ:

    public class EncryptedString
    {
        private readonly string _value;
    
        public EncryptedString(string value)
        {
            _value = value;
        }
    
        public static implicit operator string(EncryptedString s)
        {
            return s._value;
        }
    
        public static implicit operator EncryptedString(string value)
        {
            if (value == null)
                return null;
    
            return new EncryptedString(value);
        }
    }
    

    シリアライザー(確定的暗号化 を使用 ):

    public interface IEncryptedStringSerializer : IBsonSerializer<EncryptedString> {} 
    
    public class EncryptedStringSerializer : SerializerBase<EncryptedString>, IEncryptedStringSerializer
    {
        private readonly IDeterministicEncrypter _encrypter;
        private readonly string _encryptionKey;
    
        public EncryptedStringSerializer(IConfiguration configuration, IDeterministicEncrypter encrypter)
        {
            _encrypter = encrypter;
            _encryptionKey = configuration.GetSection("MongoDb")["EncryptionKey"];
        }
    
        public override EncryptedString Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
        {
            var encryptedString = context.Reader.ReadString();
            return _encrypter.DecryptStringWithPassword(encryptedString, _encryptionKey);
        }
    
        public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, EncryptedString value)
        {
            var encryptedString = _encrypter.EncryptStringWithPassword(value, _encryptionKey);
            context.Writer.WriteString(encryptedString);
        }
    }
    

    シリアライザーの登録:

    collection.AddScoped<IEncryptedStringSerializer, EncryptedStringSerializer>();
    //then later...
    BsonSerializer.RegisterSerializer<EncryptedString>(sp.GetService<IEncryptedStringSerializer>());
    



    1. マングースでmongodockerイメージに接続できません

    2. 同じRubyRailsプロジェクトでMongoMapperとActiveRecordを構成する方法

    3. MongoDBのアップサートガイド

    4. IDを含むMongodbコレクション内のすべてのオブジェクトを取得するにはどうすればよいですか?