passwd


Submit solution

Points: 10
Time limit: 5.0s
Memory limit: 256M

Author:
Problem type
Allowed languages
C#, Go, Java

L'arxiu /etc/passwd emmagatzema els usuaris del sistema. Cada línia conté la informació d'un usuari i té els següents camps:

  • Username

  • Encrypted password. Tradicionalment, aquest camp contenia el password encriptat de l'usuari. Els sistemes Unix moderns, guarden els passwords encriptats en un arxiu separat (/etc/shadow) que només pot ser accedit per usuaris privilegiats

  • User identification number (UID)

  • Group identification number (GID)

  • Full name

  • Home directory

  • Shell

Realitzarem un programa que permeti generar automàticament una sèrie d'usuaris amb el format de l'ariux passwd. Les dades dels usuaris es generaran d'aquesta forma1:

  • : serà la paraula 'user' seguit de l' de l'usuari

  • : usarem una funció HASH sencilla per a generar un password a partir de l'UID. Després encryptarem el password generat amb l'algoritme MD5.

  • : es generarà de forma consecutiva a partir del 1001

  • : serà sempre 1000

  • : La paraula "Usuari" + espai en blanc +

  • : /home/

  • : /bin/bash

Encriptació del password

El password serà un número que es generarà a partir de l'UID de l'usuari, usant aquesta funció HASH:

HASH(UID) = (UID << 29 ^ UID << 17) >>> 1

Un cop generat el password, l'encriptarem amb l'algoritme MD5 que implementa el paquet java.security.MessageDigest:

String encrypted = Base64.getEncoder().encodeToString(MessageDigest.getInstance("md5").digest((String.valueOf(password)).getBytes()));

* la variable és el número que s'ha generat a partir de l'UID

Finalment, a l'arxiu /etc/passwd cal indicar quin és l'algoritme utilitzat. En el cas d'MD5 s'indica amb la marca just davant del password encryptat.

NOTES:

(1) L'algoritme MD5 implementat a MessageDigest NO és compatible amb l'algoritme que usa GNU/Linux

(2) L'algoritme MD5 no és segur, caldria utilitzar SHA-512

(3) Generar contrasenyes a partir de dades conegudes, com l'UID, no és segur. Cal generar contrasenyes aleatòries.

Input Format

L'entrada consta d'un nombre enter que indica la quantitat d'usuaris a generar.

Constraints

-

Output Format

S'imprimiràn les dades dels usuaris amb el format de la l'arxiu /etc/passwd.

Test Case 1

Input
1
Output
user1001:$1$vDPhC74V3fXYq18yO6t8ZQ==:1001:1000:Usuari 1001:/home/user1001:/bin/bash

Test Case 2

Input
3
Output
user1001:$1$vDPhC74V3fXYq18yO6t8ZQ==:1001:1000:Usuari 1001:/home/user1001:/bin/bash
user1002:$1$AtlJg9+o4AcNq3dxAK9c4g==:1002:1000:Usuari 1002:/home/user1002:/bin/bash
user1003:$1$nGojHzFqYeA7AoY4Ko9fpg==:1003:1000:Usuari 1003:/home/user1003:/bin/bash

Test Case 3

Input
5
Output
user1001:$1$vDPhC74V3fXYq18yO6t8ZQ==:1001:1000:Usuari 1001:/home/user1001:/bin/bash
user1002:$1$AtlJg9+o4AcNq3dxAK9c4g==:1002:1000:Usuari 1002:/home/user1002:/bin/bash
user1003:$1$nGojHzFqYeA7AoY4Ko9fpg==:1003:1000:Usuari 1003:/home/user1003:/bin/bash
user1004:$1$KSEhN0wmkcsGmUeNxkCBYg==:1004:1000:Usuari 1004:/home/user1004:/bin/bash
user1005:$1$ilFZYzkzhmyu6HFPF/HtOA==:1005:1000:Usuari 1005:/home/user1005:/bin/bash

Test Case 4

Input
25
Output
user1001:$1$vDPhC74V3fXYq18yO6t8ZQ==:1001:1000:Usuari 1001:/home/user1001:/bin/bash
user1002:$1$AtlJg9+o4AcNq3dxAK9c4g==:1002:1000:Usuari 1002:/home/user1002:/bin/bash
user1003:$1$nGojHzFqYeA7AoY4Ko9fpg==:1003:1000:Usuari 1003:/home/user1003:/bin/bash
user1004:$1$KSEhN0wmkcsGmUeNxkCBYg==:1004:1000:Usuari 1004:/home/user1004:/bin/bash
user1005:$1$ilFZYzkzhmyu6HFPF/HtOA==:1005:1000:Usuari 1005:/home/user1005:/bin/bash
user1006:$1$y6YEvo+ZnY2rIaC0UQ0U4Q==:1006:1000:Usuari 1006:/home/user1006:/bin/bash
user1007:$1$PeEi2UUpx6YG9g03Pvi0Yw==:1007:1000:Usuari 1007:/home/user1007:/bin/bash
user1008:$1$91QhZn+JsQi3tla3s8Vg0g==:1008:1000:Usuari 1008:/home/user1008:/bin/bash
user1009:$1$f1rqDDF23s3msPw+scAvsw==:1009:1000:Usuari 1009:/home/user1009:/bin/bash
user1010:$1$R5+II+gef8G26KwIR40R3g==:1010:1000:Usuari 1010:/home/user1010:/bin/bash
user1011:$1$5pDMQd4snmdM+tGP684mPQ==:1011:1000:Usuari 1011:/home/user1011:/bin/bash
user1012:$1$0tHMzZaVxLmzeBFXQ7uZcA==:1012:1000:Usuari 1012:/home/user1012:/bin/bash
user1013:$1$K+i+1q5zA2NWzH+wcyOM0w==:1013:1000:Usuari 1013:/home/user1013:/bin/bash
user1014:$1$2YSTN2cswThMECKAz350kQ==:1014:1000:Usuari 1014:/home/user1014:/bin/bash
user1015:$1$fqKmwJ4qfrNB3sRVDX2i4A==:1015:1000:Usuari 1015:/home/user1015:/bin/bash
user1016:$1$ltaLo2AwfqyIyIebAgo0Bw==:1016:1000:Usuari 1016:/home/user1016:/bin/bash
user1017:$1$rKhyNz3RrNojw9aHQh4jBg==:1017:1000:Usuari 1017:/home/user1017:/bin/bash
user1018:$1$ayKGwRAni2K8Z5i23Nc47w==:1018:1000:Usuari 1018:/home/user1018:/bin/bash
user1019:$1$khAzaekoHdZ+eLkjV/d6yg==:1019:1000:Usuari 1019:/home/user1019:/bin/bash
user1020:$1$SfbqSNXf1WRCin3PzyExfQ==:1020:1000:Usuari 1020:/home/user1020:/bin/bash
user1021:$1$pOFVdv88Px7t5AHwU9q+Cg==:1021:1000:Usuari 1021:/home/user1021:/bin/bash
user1022:$1$1D7sIZngLxjwAsj0VVLd8g==:1022:1000:Usuari 1022:/home/user1022:/bin/bash
user1023:$1$fHPIdAQzw9zMwCQaCuRquQ==:1023:1000:Usuari 1023:/home/user1023:/bin/bash
user1024:$1$cTkTm4fbno4EoWFWHBr/og==:1024:1000:Usuari 1024:/home/user1024:/bin/bash
user1025:$1$dGl3+wMYM7kiFr8VE0c1Tg==:1025:1000:Usuari 1025:/home/user1025:/bin/bash

Test Case 5

Input
1
Output
user1001:$1$vDPhC74V3fXYq18yO6t8ZQ==:1001:1000:Usuari 1001:/home/user1001:/bin/bash

Test Case 6

Input
47
Output
user1001:$1$vDPhC74V3fXYq18yO6t8ZQ==:1001:1000:Usuari 1001:/home/user1001:/bin/bash
user1002:$1$AtlJg9+o4AcNq3dxAK9c4g==:1002:1000:Usuari 1002:/home/user1002:/bin/bash
user1003:$1$nGojHzFqYeA7AoY4Ko9fpg==:1003:1000:Usuari 1003:/home/user1003:/bin/bash
user1004:$1$KSEhN0wmkcsGmUeNxkCBYg==:1004:1000:Usuari 1004:/home/user1004:/bin/bash
user1005:$1$ilFZYzkzhmyu6HFPF/HtOA==:1005:1000:Usuari 1005:/home/user1005:/bin/bash
user1006:$1$y6YEvo+ZnY2rIaC0UQ0U4Q==:1006:1000:Usuari 1006:/home/user1006:/bin/bash
user1007:$1$PeEi2UUpx6YG9g03Pvi0Yw==:1007:1000:Usuari 1007:/home/user1007:/bin/bash
user1008:$1$91QhZn+JsQi3tla3s8Vg0g==:1008:1000:Usuari 1008:/home/user1008:/bin/bash
user1009:$1$f1rqDDF23s3msPw+scAvsw==:1009:1000:Usuari 1009:/home/user1009:/bin/bash
user1010:$1$R5+II+gef8G26KwIR40R3g==:1010:1000:Usuari 1010:/home/user1010:/bin/bash
user1011:$1$5pDMQd4snmdM+tGP684mPQ==:1011:1000:Usuari 1011:/home/user1011:/bin/bash
user1012:$1$0tHMzZaVxLmzeBFXQ7uZcA==:1012:1000:Usuari 1012:/home/user1012:/bin/bash
user1013:$1$K+i+1q5zA2NWzH+wcyOM0w==:1013:1000:Usuari 1013:/home/user1013:/bin/bash
user1014:$1$2YSTN2cswThMECKAz350kQ==:1014:1000:Usuari 1014:/home/user1014:/bin/bash
user1015:$1$fqKmwJ4qfrNB3sRVDX2i4A==:1015:1000:Usuari 1015:/home/user1015:/bin/bash
user1016:$1$ltaLo2AwfqyIyIebAgo0Bw==:1016:1000:Usuari 1016:/home/user1016:/bin/bash
user1017:$1$rKhyNz3RrNojw9aHQh4jBg==:1017:1000:Usuari 1017:/home/user1017:/bin/bash
user1018:$1$ayKGwRAni2K8Z5i23Nc47w==:1018:1000:Usuari 1018:/home/user1018:/bin/bash
user1019:$1$khAzaekoHdZ+eLkjV/d6yg==:1019:1000:Usuari 1019:/home/user1019:/bin/bash
user1020:$1$SfbqSNXf1WRCin3PzyExfQ==:1020:1000:Usuari 1020:/home/user1020:/bin/bash
user1021:$1$pOFVdv88Px7t5AHwU9q+Cg==:1021:1000:Usuari 1021:/home/user1021:/bin/bash
user1022:$1$1D7sIZngLxjwAsj0VVLd8g==:1022:1000:Usuari 1022:/home/user1022:/bin/bash
user1023:$1$fHPIdAQzw9zMwCQaCuRquQ==:1023:1000:Usuari 1023:/home/user1023:/bin/bash
user1024:$1$cTkTm4fbno4EoWFWHBr/og==:1024:1000:Usuari 1024:/home/user1024:/bin/bash
user1025:$1$dGl3+wMYM7kiFr8VE0c1Tg==:1025:1000:Usuari 1025:/home/user1025:/bin/bash
user1026:$1$E6UzL7yQel2SVj5mMoGuwg==:1026:1000:Usuari 1026:/home/user1026:/bin/bash
user1027:$1$17wUiSJO+VokREvSlMXNGw==:1027:1000:Usuari 1027:/home/user1027:/bin/bash
user1028:$1$MX2adUqD+HA2L0wT0NvFxg==:1028:1000:Usuari 1028:/home/user1028:/bin/bash
user1029:$1$S7nqvXWVdXdCN5V41ut/Rg==:1029:1000:Usuari 1029:/home/user1029:/bin/bash
user1030:$1$IHA1IdqTp7gSUjtNE1WDtg==:1030:1000:Usuari 1030:/home/user1030:/bin/bash
user1031:$1$2EfcbE9Cxt1MelBhAxqikA==:1031:1000:Usuari 1031:/home/user1031:/bin/bash
user1032:$1$fnLNKyltZQ5612gY030Wew==:1032:1000:Usuari 1032:/home/user1032:/bin/bash
user1033:$1$S5KAhvqf6VWkjY3/USbU3g==:1033:1000:Usuari 1033:/home/user1033:/bin/bash
user1034:$1$wtmTR62okeyOtcQBY6KoRA==:1034:1000:Usuari 1034:/home/user1034:/bin/bash
user1035:$1$u22199Kp27rRY0ufMlq1Sg==:1035:1000:Usuari 1035:/home/user1035:/bin/bash
user1036:$1$9vYEq5naBhNeU9MjPXKz9Q==:1036:1000:Usuari 1036:/home/user1036:/bin/bash
user1037:$1$cG776n8p2pCvZL/lwCU9cA==:1037:1000:Usuari 1037:/home/user1037:/bin/bash
user1038:$1$PK1XB5Zl3giiZ9JVIJ0Mhg==:1038:1000:Usuari 1038:/home/user1038:/bin/bash
user1039:$1$+fL89mCp6oYclBRBmLP2BQ==:1039:1000:Usuari 1039:/home/user1039:/bin/bash
user1040:$1$3w4UMGNnOuAgJ7u0bNxw+w==:1040:1000:Usuari 1040:/home/user1040:/bin/bash
user1041:$1$FBya24k4Aenk6+qczpndxg==:1041:1000:Usuari 1041:/home/user1041:/bin/bash
user1042:$1$wVrLwqD5FRDnLHnuCPVK7g==:1042:1000:Usuari 1042:/home/user1042:/bin/bash
user1043:$1$vw2VcpDG/ecm7Cl9sxivgg==:1043:1000:Usuari 1043:/home/user1043:/bin/bash
user1044:$1$OXLmaaYepQ7Psdg7T8YjTg==:1044:1000:Usuari 1044:/home/user1044:/bin/bash
user1045:$1$rKu0XlPtOPvpT1Vj7zWmXQ==:1045:1000:Usuari 1045:/home/user1045:/bin/bash
user1046:$1$5vqQJbmYR4MjwTZ7s0rKLA==:1046:1000:Usuari 1046:/home/user1046:/bin/bash
user1047:$1$eENauUDuclTulzF3FgQvcA==:1047:1000:Usuari 1047:/home/user1047:/bin/bash

Authorship: Gerard Falcó

CC BY-NC-SA 4.0