ОК, так что я немного поработал над этим, и я не вижу, как это сделать дальше. Я продолжаю сталкиваться с препятствиями с помощью DESCryptoServiceProvider, и почему-то кажется, что он не дает правильных ответов.
версия LM_Hash кода sudo:
LMHASH = concat(DES(Upper(PWD)[0..7],KGS!@#$%),DES(Upper(PWD)[8..13],KGS!@#$%))
Первая проблема - это ключ LM. Я по-прежнему вижу по крайней мере два варианта: «KGS! @ # $%» Или «KGS! + # $%», И я не получаю правильных ответов, но оба не соответствуют происхождению. история (его KGS и SHIFT 12345 в американской клавиатуре
в Великобритании это "KGS!" £ $% ")
Я почти уверен, что теперь у меня правильно настроены параметры, но мое понимание, похоже, подводит меня. вот что у меня пока, любая помощь приветствуется. Я запускаю Powershell V5.1 на Win 10, строка для шифрования передается как $ string
$plaintext = "KGS!@#$%"
$OEM = [System.Text.Encoding]::GetEncoding($Host.CurrentCulture.TextInfo.OEMCodePage)
$str1 = $OEM.GetBytes($string.substring(0,7)) +[Byte]$null
$str2 = $OEM.GetBytes($string.Substring(7)) +[Byte]$null
$IV = new-object "System.Byte[]" 8
$hasher = New-Object -TypeName System.Security.Cryptography.DESCryptoServiceProvider -Property @{key=$str1; IV = $IV; mode = [System.Security.Cryptography.CipherMode]::ECB; Padding=[System.Security.Cryptography.PaddingMode]::None}
$outbyte = new-object "System.Byte[]" 8
$encrypter1 = $hasher.CreateEncryptor()
$outbyte = $encrypter1.TransformFinalBlock($OEM.GetBytes($plaintext),0,8)
$data1 = [System.BitConverter]::ToString($outbyte).replace("-","")
$encrypter1.Dispose()
Теоретически это должно зашифровать Ключ (какой бы он ни был) с помощью DES, используя первые 7 символов строки ($ str1) в качестве ключа (с нулевым байтом в конце), а затем мы делаем это с вторая половина ($ str2) и объедините их вместе, чтобы получить LMHASH.