Versión 2.5 del Servidor HTTP Apache
Notas sobre los formatos de encriptación generados y comprendidos por Apache.
Hay cinco formatos que Apache reconoce para contraseñas de autenticación-básica. Tenga en cuenta que no todos los formatos funcionan en todas las plataformas:
crypt(3)
con un valor salt de 32-bit generado aleatoriamente (solo se usan 12 bits) y los primeros 8 caracteres de la contraseña. Inseguro.
$ htpasswd -nbB myName myPassword
myName:$2y$05$c4WoMPo3SXsafkva.HHa6uXQZWr7oboPiC2bT/r7q1BB8I2s0BRqC
$ htpasswd -nbm myName myPassword
myName:$apr1$r31.....$HqJZimcKQFAMYayBlzkrA/
$ htpasswd -nbs myName myPassword
myName:{SHA}VBPuJHI7uixaa6LQGWx4s+5GKNE=
$ htpasswd -nbd myName myPassword
myName:rqXexS6ZhobKA
OpenSSL conoce el algoritmo MD5 específico-de-Apache.
$ openssl passwd -apr1 myPassword
$apr1$qHDFfhPC$nITSVHgYbDAK1Y0acGRnY0
openssl passwd -crypt myPassword
qQ5vTYO3c8dsU
El valor salt de una contraseña CRYPT es sus dos primeros caracteres
(convertidos a un valor binario). Para validar myPassword
contra rqXexS6ZhobKA
$ openssl passwd -crypt -saltt rq myPassword
Warning: truncating password to 8 characters
rqXexS6ZhobKA
Tenga en cuenta que usando myPasswo
en lugar de
myPassword
producirá el mismo resultado porque solo se tienen en cuenta los 8 primeros caracteres de las contraseñas CRYPT.
El valor salt para una contraseña MD5 está entre $apr1$
y el siguiente $
(como un valor binario codificado-en-Base64 máximo 8 caracteres).
Para validar myPassword
contra
$apr1$r31.....$HqJZimcKQFAMYayBlzkrA/
$ openssl passwd -apr1 -saltt r31..... myPassword
$apr1$r31.....$HqJZimcKQFAMYayBlzkrA/
La variante SHA1 es probablemente el formato más útil para autenticación DBD. Desde que las funciones SHA1 y Base64 están disponibles generalmente, otro software puede poblar una base de datos con contraseñas encriptadas que son utilizables con la autenticación básica de Apache.
Para generar contraseñas de la variante Apache de SHA-1 para autenticación básica en varios lenguajes:
'{SHA}' . base64_encode(sha1($password, TRUE))
"{SHA}" + new sun.misc.BASE64Encoder().encode(java.security.MessageDigest.getInstance("SHA1").digest(password.getBytes()))
"{SHA}" & ToBase64(BinaryDecode(Hash(password, "SHA1"), "Hex"))
require 'digest/sha1'
require 'base64'
'{SHA}' + Base64.encode64(Digest::SHA1.digest(password))
Use la función APR: apr_sha1_base64
import base64
import hashlib
"{SHA}" + format(base64.b64encode(hashlib.sha1(password).digest()))
'{SHA}'||encode(digest(password,'sha1'),'base64')
Apache reconoce un formato para las contraseñas de autenticación-digest - el MD5 hash de la cadena de caracteres user:realm:password
como una cadena de 32-caracteres de dígitos hexadecimales. realm
es el parámetro del Ámbito de Autorización para la directiva
AuthName
en
httpd.conf.
Puesto que la función MD5 está disponible generalmente, otro software puede rellenar la base de daatos con contraseñas encriptadas que son utilizables por la autenticación digest de Apache.
Para generar contraseñas de autenticación-digest de Apache en varios lenguajes:
md5($user . ':' . $realm . ':' .$password)
byte b[] = java.security.MessageDigest.getInstance("MD5").digest( (user + ":" + realm + ":" + password ).getBytes());
java.math.BigInteger bi = new java.math.BigInteger(1, b);
String s = bi.toString(16);
while (s.length() < 32)
s = "0" + s;
// La cadena s es la contraseña encriptada.
LCase(Hash( (user & ":" & realm & ":" & password) , "MD5"))
require 'digest/md5'
Digest::MD5.hexdigest(user + ':' + realm + ':' + password)
encode(digest( user || ':' || realm || ':' || password , 'md5'), 'hex')