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.
- 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()))"
- 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:
- 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; }
- Genere una sal.
private static String generateSalt() { String salt; try { salt = "$6$" + getCharAndNumr(16); }catch (Exception e){ salt = defaultSalt; } return salt; }
- 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); }
- Codifique el valor del campo password mediante Base64.
(Base64.getEncoder().encodeToString(AddSaltPasswordUtil.getSaltPassword(cceNodeCreateVo.getPassword()).getBytes()))
- 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: