phpass बेस 64 एन्कोड के लिए encode64() में एक अजीब (मेरे लिए) एल्गोरिदम का उपयोग करता है। Base64 और Uuencode एक प्रिंट करने योग्य चार पर मैपिंग करने से पहले प्रत्येक ऑक्टेट का उत्पादन करने के लिए रैखिक रूप से 6 बिट्स को घुमाएं। encode64
आसपास बिट्स shuffles:फ़ेस का कस्टम बेस 64 एन्कोडर: क्या इसका बेस 64 पर नाम/लाभ है?
input bit location: abcdefgh ijklmnop qrstuvwx
base64 bit location: ..abcdef ..ghijkl ..mnopqr ..stuvwx
encode64 bit location: ..cdefgh ..mnopab ..wxijkl ..qrstuv
इस एल्गोरिथ्म सामान्यतः ज्ञात है? और पिछड़े संगतता के अलावा, इसे बेस 64 पर क्यों चुनें?
नीचे मैं इसे फिर से लिख दिया एल्गोरिथ्म स्पष्ट करने के लिए: '।'
function encode64($input, $bytesToProcess)
{
// convert to array of ints
for ($i = 0; $i < $bytesToProcess; $i++) {
$bytes[] = ord($input[$i]);
}
$octets = array();
$i = 0;
do {
$value = $bytes[$i++];
$octets[] = $value & 0x3f;
if ($i < $bytesToProcess) {
$value |= $bytes[$i] << 8;
}
$octets[] = ($value >> 6) & 0x3f;
if ($i++ >= $bytesToProcess) {
break;
}
if ($i < $bytesToProcess) {
$value |= $bytes[$i] << 16;
}
$octets[] = ($value >> 12) & 0x3f;
if ($i++ >= $bytesToProcess) {
break;
}
$octets[] = ($value >> 18) & 0x3f;
} while ($i < $bytesToProcess);
return array_map(function ($i) {
return str_pad(base_convert($i, 10, 2), 6, '0', STR_PAD_LEFT);
}, $octets);
}
var_export(encode64("Man", 3));
[ड्रूपल का बंदरगाह] (http://drupalcode.org/project/drupal.git/blob/refs/heads/7.x:/includes/password.inc#l46) इसे "* * निक्स मानक के रूप में वर्णित करता है क्रिप्ट() " –