dybyte commented on issue #10246:
URL: https://github.com/apache/seatunnel/issues/10246#issuecomment-3734635435

   # **FieldEncrypt Transform Design Document**
   
   ---
   
   ## **Configuration**
   
   ```bash
   transform {
     FieldEncrypt {
       fields = ["phone", "email"]
       algorithm = "AES_CBC"
       key = "base64:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="  # Base64-encoded key
       mode = "ENCRYPT"  # ENCRYPT or DECRYPT
     }
   }
   ```
   
   ### **Parameters**
   
   | **Parameter** | **Type** | **Required** | **Default** | **Description** |
   | --- | --- | --- | --- | --- |
   | `fields` | List<String> | Yes | - | List of fields to encrypt/decrypt |
   | `algorithm` | Enum | No | `AES_CBC` | Encryption algorithm |
   | `key` | String | Yes | - | Base64-encoded encryption key |
   | `mode` | Enum | No | `ENCRYPT` | Operation mode: `ENCRYPT` or `DECRYPT` |
   
   ---
   
   ## **Key Design Decisions**
   
   ### **1. Encryption Algorithms**
   
   - AES/CBC/PKCS5Padding (random IV)
       - For AES/CBC, a random IV is generated per record and
       appended to the ciphertext.
   
   ---
   
   ### **2. Supported Data Types**
   
   **Decision**: **String fields only**
   
   - Can be extended to other types in future versions if needed
   
   ---
   
   ### **3. Encryption/Decryption Mode**
   
   **Decision**: transform with `mode` parameter
   
   Decryption or encryption errors will cause the job to fail fast.
   
   ---
   
   ### 4. Key
   
   The decoded key length must be valid for the selected AES variant (e.g., 
16/24/32 bytes).
   
   Invalid keys will cause job startup failure.
   
   ---
   
   ## **Usage Examples**
   
   ### **Example 1: Encryption**
   
   ```bash
   transform {
     FieldEncrypt {
       fields = ["phone", "email"]
       key = "base64:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
       mode = "ENCRYPT"
     }
   }
   ```
   
   ---
   
   ### **Example 2: Multi-Table Transform**
   
   ```bash
   source {
     FakeSource {
       tables_configs = [
         {
           row.num = 100
           schema = {
             table = "test.abc"
             columns = [
               { name = "id", type = "bigint" },
               { name = "name", type = "string" },
               { name = "address", type = "string" }
             ]
           }
         },
         {
           row.num = 100
           schema = {
             table = "test.xyz"
             columns = [
               { name = "id", type = "bigint" },
               { name = "name", type = "string" },
               { name = "age", type = "string" }
             ]
           }
         },
         {
           row.num = 100
           schema = {
             table = "test.www"
             columns = [
               { name = "id", type = "bigint" },
               { name = "name", type = "string" },
               { name = "age", type = "string" }
             ]
           }
         }
       ]
     }
   }
   
   transform {
     FieldEncrypt {
          fields = ["age"]
       key = "base64:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
       algorithm = "AES_CBC"
       mode = "ENCRYPT"
       
       table_transform = [
         {
           table_path = "test.abc"
           fields = ["address"]
         }
       ]
     }
   }
   
   sink {
     Console {}
   }
   ```
   
   ---
   
   ### **Example 3: Decryption**
   
   ```bash
   transform {
     FieldEncrypt {
       fields = ["phone", "email"]
       key = "base64:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
       mode = "DECRYPT"
     }
   }
   ```
   
   ---
   
   **Note**: Initial implementation will focus on core functionality, with 
plans for future feature expansion.
   
   I appreciate any feedback or suggestions for improvements. If you have ideas 
for additional features or enhancements, please let us know in the comments.
   
   Thank you for your input!


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to