Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Centro de ayuda/ Cloud Container Engine/ Referencia de la API/ Apéndice/ Adición de una sal en el campo de contraseña al crear un nodo
Actualización más reciente 2023-04-13 GMT+08:00

Adición de una sal en el campo de contraseña al crear un nodo

Cuando se crea un nodo a través de la API, debe agregar una sal al campo password para proteger la contraseña. El procedimiento es el siguiente:

La sal debe configurarse en función de los requisitos de complejidad de contraseña:

  • Una cadena de 8–26 caracteres.
  • Contiene al menos tres de los siguientes tipos de caracteres: letras mayúsculas, minúsculas, dígitos y characters especiales !@$%^-_=+[{}]:,./?
  • No puede contener el nombre de usuario ni el nombre de usuario escrito al revés.
  • No puede contener el nombre de usuario, el nombre de usuario escrito al revés o más de dos caracteres consecutivos en el nombre de usuario (para los ECS de Windows).

Python

Para salar una contraseña en el entorno de Python 3.7.7, realice los siguientes pasos:

El paquete python crypt tiene problemas de compatibilidad en macOS. Si el paquete no se puede ejecutar, ejecútelo en Linux.

  1. Agregue \ antes de $ en la sal. Genere una contraseña de texto cifrado basada en la sal actualizada.
    python3 -c "import crypt;print(crypt.crypt('******', crypt.mksalt()))"
  2. Codifique el valor del campo password mediante Base64.
    echo -n '******' | base64 | tr "\n" " " | sed s/[[:space:]]//g

Java

Para salar una contraseña en el entorno de Java, realice los siguientes pasos:

  1. Obtenga un número aleatorio como la sal.
    	private static String getCharAndNumr(int length) {
            String val = "";
            Random random = new Random();
            for (int i = 0; i < length; i++) {
                // Indicates whether to output letters or digits.
                String charOrNum = random.nextInt(2) % 2 == 0 ? "char" : "num";
                // Character string
                if ("char".equalsIgnoreCase(charOrNum)) {
                    // Indicates whether an upper-case or lower-case letter is obtained.
                    int choice = random.nextInt(2) % 2 == 0 ? 65 : 97;
                    val += (char) (choice + random.nextInt(26));
                } else if ("num".equalsIgnoreCase(charOrNum)) {// Digit
                    val += String.valueOf(random.nextInt(10));
                }
            }
            return val;
        }
  2. Genere una sal.
    	private static String generateSalt() {
            String salt;
            try {
                salt = "$6$" + getCharAndNumr(16);
            }catch (Exception e){
                salt = defaultSalt;
            }
    
            return salt;
        }
  3. Genere una contraseña de texto cifrado basada en la sal.
      public static String getSaltPassword(String password) {
            if(StringUtils.isBlank(password)) {
                throw new BizException("password is empty");
            }
    
            String salt = generateSalt();
    
            Crypt crypt = new Crypt();
            return crypt.crypt(password, salt);
        }
  4. Codifique el valor del campo password mediante Base64.
    (Base64.getEncoder().encodeToString(AddSaltPasswordUtil.getSaltPassword(cceNodeCreateVo.getPassword()).getBytes()))
  5. Un ejemplo completo es el siguiente:
    import java.util.Base64;
    import java.util.Random;
    
    import org.apache.commons.codec.digest.Crypt;
    import org.apache.commons.lang.StringUtils;
    
    public class PassWord {
    	static String defaultSalt = null;
    	public static void main(String[] args) throws Exception {
    		System.out.println(Base64.getEncoder().encodeToString(PassWord.getSaltPassword("Customized password").getBytes()));
    	}	
    	//Generate a ciphertext password based on the salt.
    	public static String getSaltPassword(String password) throws Exception {
            if(StringUtils.isBlank(password)) {
                throw new Exception("password is empty");
            }
    
            String salt = generateSalt();
    
            return Crypt.crypt(password, salt);
        }
    
    
    	//Generate a salt.
    	private static String generateSalt() {
            String salt;
            try {
                salt = "$6$" + getCharAndNumr(16);
            }catch (Exception e){
                salt = defaultSalt;
            }
    
            return salt;
        }
    	//Obtain a random number as the salt.
    	private static String getCharAndNumr(int length) {
            String val = "";
            Random random = new Random();
            for (int i = 0; i < length; i++) {
                // Indicates whether to output letters or digits.
                String charOrNum = random.nextInt(2) % 2 == 0 ? "char" : "num";
                // Character string
                if ("char".equalsIgnoreCase(charOrNum)) {
                    // Indicates whether an upper-case or lower-case letter is obtained.
                    int choice = random.nextInt(2) % 2 == 0 ? 65 : 97;
                    val += (char) (choice + random.nextInt(26));
                } else if ("num".equalsIgnoreCase(charOrNum)) {// Digit
                    val += String.valueOf(random.nextInt(10));
                }
            }
            return val;
        }
    }

Go

Puede utilizar cualquiera de los siguientes métodos para salar contraseñas para el idioma Go: