2010-09-13 176 views
2

爲什麼要這樣做。將 000添加到密碼字符串中的每個字符

for ($i = 0; $i < $len; $i++) { 
    $unicodepassword .= "{$passwd{$i}}\000"; 
} 

上下文:這是在Active Directory中創建或修改用戶時設置的密碼。我們正在重寫一些古代的代碼,沒有這個代碼就沒有任何作用在我們的LDAP中進行更改不需要這種「編碼」。

此練習的結果稱爲「unicodepassword」,對我來說似乎很陌生。

+0

我真的在這裏猜測,但它可能是將ascii轉換爲UTF-16或其他一些通常使用多個字節的編碼? – 2010-09-13 14:52:00

+0

@Fabian不錯的猜測 - 可能是:這些角色會變得無法讀取,但這並不重要,因爲無論如何它都是密碼。通過這種方式,字符串將被填充到一個有效的多字節字符並可存儲在UTF-16環境中。 – 2010-09-13 14:55:06

+0

** This **是一個優秀的[CodingHorror](http://www.codinghorror.com)和[TheDailyWTF] (http://thedailywtf.com)材料。 – shamittomar 2010-09-13 14:55:53

回答

2

此練習的結果稱爲「unicodepassword」,對我來說似乎很陌生。

這實際上是從ASCII到UTF-16(小端)的簡單轉換。對於字符>#127,它將轉換爲與ord($passwd{$i})相同的unicode代碼點(因此它將取決於原始密碼的編碼)。

+1

這也許可以解釋爲什麼這通過我們從ISO過渡到UTF8。非ASCII字符從未被允許。 – jtm 2010-09-13 15:56:45

相關問題