爲什麼要這樣做。將 000添加到密碼字符串中的每個字符
for ($i = 0; $i < $len; $i++) {
$unicodepassword .= "{$passwd{$i}}\000";
}
上下文:這是在Active Directory中創建或修改用戶時設置的密碼。我們正在重寫一些古代的代碼,沒有這個代碼就沒有任何作用在我們的LDAP中進行更改不需要這種「編碼」。
此練習的結果稱爲「unicodepassword」,對我來說似乎很陌生。
爲什麼要這樣做。將 000添加到密碼字符串中的每個字符
for ($i = 0; $i < $len; $i++) {
$unicodepassword .= "{$passwd{$i}}\000";
}
上下文:這是在Active Directory中創建或修改用戶時設置的密碼。我們正在重寫一些古代的代碼,沒有這個代碼就沒有任何作用在我們的LDAP中進行更改不需要這種「編碼」。
此練習的結果稱爲「unicodepassword」,對我來說似乎很陌生。
此練習的結果稱爲「unicodepassword」,對我來說似乎很陌生。
這實際上是從ASCII到UTF-16(小端)的簡單轉換。對於字符>#127,它將轉換爲與ord($passwd{$i})
相同的unicode代碼點(因此它將取決於原始密碼的編碼)。
這也許可以解釋爲什麼這通過我們從ISO過渡到UTF8。非ASCII字符從未被允許。 – jtm 2010-09-13 15:56:45
我真的在這裏猜測,但它可能是將ascii轉換爲UTF-16或其他一些通常使用多個字節的編碼? – 2010-09-13 14:52:00
@Fabian不錯的猜測 - 可能是:這些角色會變得無法讀取,但這並不重要,因爲無論如何它都是密碼。通過這種方式,字符串將被填充到一個有效的多字節字符並可存儲在UTF-16環境中。 – 2010-09-13 14:55:06
** This **是一個優秀的[CodingHorror](http://www.codinghorror.com)和[TheDailyWTF] (http://thedailywtf.com)材料。 – shamittomar 2010-09-13 14:55:53