es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Puedo cifrar una cadena en springboot utilizando Google Cloud KMS? En caso afirmativo, ¿cómo podemos proporcionar una encriptación?

A continuación se muestra el texto que se está registrando. Necesito encriptar la cadena (Numbermr) para que no se muestre el valor en los registros como texto plano. ¿Alguna idea de cómo encriptar esta cadena (Numbermr) en Java utilizando Google Cloud KMS?

/**
 * Para registrar datos
 */
public void logAuditInput(AssignmentInformation assignmentInformation, JSONObject jONObject, String modelHashWithProject, String api_version)
{
    JSONObject recordsJson = new JSONObject();
    recordsJson.put("uuid", asgnmntInfo.getScoringTicketUUID());
    recordsJson.put("Numbermr", asgnmntInfo.getNumbermr());
    recordsJson.put("timestamp", LocalDateTime.now().toString());
    LOG.debug(recordsJson.toString());
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para encriptar la cadena Numbermr utilizando Google Cloud KMS en Java, puedes seguir estos pasos:

    1. Primero, necesitas crear un keyring y una clave KMS en la Consola de Google Cloud si aún no lo has hecho.
    2. Importa la biblioteca necesaria de Google Cloud KMS en tu proyecto Java agregando la siguiente dependencia a tu archivo pom.xml:

    <dependency>
        <groupid>com.google.cloud</groupid>
        <artifactid>google-cloud-kms</artifactid>
        <version>1.101.0</version>
    </dependency>
    
    1. En tu método logAuditInput(), utiliza la clase KeyManagementServiceClient de la biblioteca KMS para crear un objeto EncryptRequest y especificar la cadena sin formato Numbermr como entrada. Establece el parámetro name de la solicitud al nombre completo del recurso de la clave que creaste en el primer paso.
    import com.google.cloud.kms.v1.CryptoKeyName;
    import com.google.cloud.kms.v1.EncryptRequest;
    import com.google.cloud.kms.v1.EncryptResponse;
    import com.google.cloud.kms.v1.KeyManagementServiceClient;
    
    // ...
    
    public void logAuditInput(AssignmentInformation assignmentInformation, JSONObject jONObject, String modelHashWithProject, String api_version)
    {
        JSONObject recordsJson = new JSONObject();
        recordsJson.put("uuid", asgnmntInfo.getScoringTicketUUID());
    
        // Crea una instancia del cliente KMS
        try (KeyManagementServiceClient client = KeyManagementServiceClient.create()) {
            // Especifica el nombre del recurso de la clave KMS a utilizar
            CryptoKeyName keyName = CryptoKeyName.of("mi-proyecto", "global", "mi-keyring", "mi-clave");
            String plaintext = asgnmntInfo.getNumbermr();
    
            byte[] plaintextBytes = plaintext.getBytes();
    
            // Crea el objeto EncryptRequest con el texto sin formato y el nombre de la clave KMS
            EncryptRequest request = EncryptRequest.newBuilder()
                .setName(keyName.toString())
                .setPlaintext(ByteString.copyFrom(plaintextBytes))
                .build();
    
            // Utiliza el cliente KMS para encriptar el texto sin formato
            EncryptResponse response = client.encrypt(request);
    
            // Obtiene el texto cifrado de la respuesta
            byte[] ciphertext = response.getCiphertext().toByteArray();
    
            // Convierte el texto cifrado en una cadena codificada en formato Base64
            String encryptedNumbermr = Base64.getEncoder().encodeToString(ciphertext);
    
            recordsJson.put("Numbermr", encryptedNumbermr);
            recordsJson.put("timestamp", LocalDateTime.now().toString());
            LOG.debug(recordsJson.toString());
        } catch (IOException e) {
            // Maneja la excepción
        }
    }
    
    1. Finalmente, utiliza el objeto EncryptResponse devuelto por el cliente KMS para extraer el texto cifrado de Numbermr y codificarlo en formato Base64. Agrega el Numbermr cifrado al objeto recordsJson y regístralo como de costumbre.

    Ten en cuenta que cuando desees descifrar el valor de Numbermr, deberás utilizar la misma clave para descifrarlo. Puedes hacer esto creando un objeto DecryptRequest utilizando el cliente KMS y pasando el texto cifrado como entrada. También deberás manejar cualquier excepción que pueda ocurrir durante el proceso de encriptación y desencriptación.

Comments are closed.