namespace Application.Abstractions.Crypto; /// /// 회원 PII(주소·연락처·수령인명 등) 필드 단위 암호화. /// 운영 정책: AES-GCM 256bit. 키는 appsettings 의 Encryption.Keys 딕셔너리에서 KeyVersion 으로 매핑. /// 키 회전 지원: 신규 암호화는 항상 CurrentKeyVersion 사용, 복호화는 row 의 KeyVersion 으로 과거 키 매핑. /// public interface IFieldEncryptor { /// 현재 사용 중인 키 버전. 신규 암호화 시 row 에 함께 저장. int CurrentKeyVersion { get; } /// /// 평문을 현재 키 버전으로 암호화. 반환값 형식: Base64(nonce 12B + ciphertext + tag 16B). /// string Encrypt(string plaintext); /// /// 지정된 키 버전으로 복호화. row 의 KeyVersion 컬럼 값을 그대로 전달. /// string Decrypt(string ciphertextBase64, int keyVersion); /// /// 검색용 SHA-256 hex 해시. 동일 평문 -> 동일 해시 (deterministic). /// 회원 주소 검색(수령인명 일치 등) 시 사용. 키와 무관 — 키 회전 영향 없음. /// string Hash(string plaintext); }