سؤال
هل هناك طريقة برمجية لبناء هتباسود الملفات دون اعتمادا على نظام التشغيل وظائف محددة (أي exec()
, passthru()
)?
المحلول
.httpasswd الملفات فقط ملفات نصية مع صيغة محددة اعتمادا على وظيفة تجزئة المحدد.إذا كنت تستخدم MD5 انها تبدو مثل هذا:
foo:$apr1$y1cXxW5l$3vapv2yyCXaYz8zGoXj241
هذا هو تسجيل الدخول, القولون, ,$apr1$ الملح و 1000 مرة md5 ترميز base64.إذا قمت بتحديد SHA1 انها تبدو مثل هذا:
foo:{SHA}BW6v589SIg3i3zaEW47RcMZ+I+M=
هذا هو تسجيل الدخول, القولون, سلسلة {إن شاء} و SHA1 تجزئة المشفرة مع base64.
إذا كانت لغتك له تنفيذ أي MD5 أو SHA1 و base64 يمكنك فقط إنشاء ملف مثل هذا:
<?php
$login = 'foo';
$pass = 'pass';
$hash = base64_encode(sha1($pass, true));
$contents = $login . ':{SHA}' . $hash;
file_put_contents('.htpasswd', $contents);
?>
وهنا مزيد من المعلومات على شكل:
http://httpd.apache.org/docs/2.2/misc/password_encryptions.html
نصائح أخرى
تراك السفن مع بيثون استبدال هتباسود الذي أنا متأكد من أنك يمكن أن منفذ إلى اللغة التي تختارها: htpasswd.py.
من ما هو مكتوب في PHP الموقع, يمكنك استخدام crypt() في الطريقة التالية:
<?php
// Set the password & username
$username = 'user';
$password = 'mypassword';
// Get the hash, letting the salt be automatically generated
$hash = crypt($password);
// write to a file
file_set_contents('.htpasswd', $username ':' . $contents);
?>
جزء من هذا المثال يمكن الاطلاع على: http://ca3.php.net/crypt
هذا بالطبع سوف الكتابة فوق كامل القائمة ملف, لذلك عليك أن ترغب في القيام ببعض النوع من concatination.
أنا لست متأكدا 100 ٪ هذا العمل, ولكن أنا متأكد.