Я шифрую конфиденциальные данные с помощью библиотеки @aws-crypto/client-node
. Я создал службу шифрования, следуя следующему примеру из aws docs с некоторыми изменениями, поскольку мне нужно хранить зашифрованные данные в MongoDB. Это служба шифрования.
async encrypt(data: string): Promise<string> {
const { result } = await encrypt(this.keyring, data, {
encryptionContext: context,
});
return result.toString('base64');
}
async decrypt(data: string): Promise<string> {
const { plaintext, messageHeader } = await decrypt(this.keyring, data, {
encoding: 'base64'
});
const { encryptionContext } = messageHeader;
Object.entries(context).forEach(([key, value]) => {
// if (encryptionContext[key] === value) console.log('Matched')
if (encryptionContext[key] !== value)
throw new Error('Encryption Context does not match expected values');
});
return plaintext.toString('utf8');
}
Я шифрую и расшифровываю данные с помощью хуков mon goose, как вы можете видеть в примере. Здесь каждый раз, когда я делаю запрос, оба действия выполняются дважды.
schema.pre<Sample>('save', async function() {
this.heartRate = await encryptionService.encrypt(this.heartRate);
});
schema.post<Sample>('save', async function(doc) {
doc.heartRate = await encryptionService.decrypt(doc.heartRate);
});
И таким образом я настраиваю модуль образца.
@Module({
imports: [
MongooseModule.forFeatureAsync([SampleSchemaFactory]),
HttpModule,
RabbitmqModule,
ConfigModule,
EncryptionModule,
],
controllers: [SampleController],
providers: [
{
provide: EncryptionService,
useValue: new EncryptionService(
'MY_KEY_ALIAS',
'MY_KEY_ID',
),
},
SampleService,
{
provide: RabbitmqService,
useValue: new RabbitmqService(
'amqp://rabbitmq',
'simulations',
'results',
),
},
],
})
export class SampleModule {}
У кого-нибудь была эта проблема ? Заранее спасибо.