2017-08-23 46 views
-1

我們擁有一批拉尼爾MFP的使用掃描至文件夾選項,以使人們能夠得到他們的證件,我們正着手實施他們通過使用AD密碼更安全的措施強制重置密碼。PowerShell的運行Java腳本加密密碼

不幸的是,Laniers使用的密碼專有加密。我設法得到了一個功能強大的Java命令,可以將密碼加密成這種格式。我遇到的問題是,我必須將此編碼密碼放入PowerShell才能將其傳遞到掃描器。

我可以通過命令行運行Java命令,但是無法通過加密的口令回PowerShell中的字符串,打印機將接受(它需要以Base64)。如果我將編碼後的密碼傳遞迴PowerShell,然後通過PowerShell的Base64創建過程運行它,顯然,對於掃描儀來說,使用它變得太多了。

我需要確定的是是否有辦法爲我採取以下命令行命令,讓它在PowerShell中運行,那麼我提供它的輸出,所以我可以把它傳遞給打印機。

java -cp ./commons-codec-1.10.jar;. cdm.GwpwesCharacterEncoding %pass% "gwpwes002" 

java命令輸出基於以下行一個Base64字符串:

return new String(Base64.encodeBase64((byte[])encrypt)); 

舉個例子,如果我通過文本「測試」成,我得到的字符串「HVhcmtla25meHVncHQ == 「

這是對我沒用,不過,因爲我不能再得到這回PowerShell來通過到打印機,如果我它編碼爲Base64使用PowerShell,它出來作爲‘MgBoAHMAWgBtADkAegBjADIAQgBxAGUAMABKAHgAWgBYAGgAbgBiAG0AMAB3AD0A’。

任何人都可以幫忙嗎?一些援助後

修改後的代碼:

$pass1 = "test" 
$path = "c:\Test\printercreds" 
$encode = "gwpwes002" 

cd $path 

$pinfo = New-Object System.Diagnostics.ProcessStartInfo 
$pInfo.FileName = 'java' 
$pInfo.Arguments = "-jar .\commons-codec-1.10.jar cdm.GwpwesCharacterEncoding $pass1 $encode" 
$pInfo.UseShellExecute = $false 
$pInfo.RedirectStandardOutput = $true 
$pInfo.RedirectStandardError = $true 
$process = New-Object System.Diagnostics.Process 
$process.StartInfo = $pInfo 
[void]$process.Start() 
$passsec = $process.StandardOutput.ReadtoEnd() 
$process.WaitforExit() 

write-host $passsec 
+1

HVhcmtla25meHVncHQ ==已經Base64編碼 –

+0

是的,它確實看起來是這樣,但是當我將該字符串拉回PowerShell(唯一的方法是讓批處理文件輸出到一個文本,然後從PowerShell中讀取該文本文件),將其提供給打印機的命令會投訴。它給出的確切錯誤是: 無法設置「propVal」,因爲只有字符串可用作設置XmlNode屬性的值 – JCovalt

+0

Java不是腳本語言,並且Java程序不是腳本。密碼應該是散列的,而不是加密的。 – EJP

回答

0

請試試這個。它的編碼爲GWPWES002。我在這裏找到了一箇舊的java版本。 https://www.dropbox.com/s/3324g84x0l4bnon/GwpwesCharacterEncoding.java?dl=0

有在這個「編碼」的弱點。編碼的前面部分只是隨機填充。包部分是存儲實際字符串的位置。只需幾次在同一個字符串上運行腳本即可指出此錯誤。

encodeGwpwes002 -code "a" 

生成該散列

np6eWFieWJ6eWA ==

np6eWJ5YWFieWA ==

WFienlhYnlieWA ==

nlhYnp5Ynp6eWA ==

nlieWFieWJ6eWA ==

一切,直到EWA ==只是隨機填充的意思是 「EWA ==」 == 「是」

同爲 「AAAAAAAA」

np5YWJ5YnlieWFhYWFhYWFg =

np5Ynp6eWJ6eWFhYWFhYWFg =

nlienp6eWJ6eWFhYWFhYWFg =

WJ5YWJ6enlieWFhYWFhYWFg =

意思就是說

「eWFhYWFhYWFg =」 是 「AAAAAAAA」。

你作爲 「測試」,提供的密碼操作的例子是:

HVhcmtla25meHVncHQ == IS 「測試」 :: 29 88 92 154 217 90 219 153 158 29 89 220 29

HVhcmtla25meFVncHQ == IS 「測試」 :: 29 88 92 154 217 90 219 153 158 21 89 220 29

這裏是我已經翻譯下面

所述的powershell
#private static String encodeGwpwes002(String code, int codeSize) { 
function encodeGwpwes002([string]$code, [int]$codeSize = 0){ 
    #byte[] protectCode; 
    [byte]$protectCode | Out-Null 
    #try { 
    try{ 
     #protectCode = code.getBytes("UTF-8"); 
     $protectCode = [System.Text.Encoding]::UTF8.GetBytes($code) 
    #}catch (Throwable e) { 
    }catch{ 
     #return null; 
     return $null 
    #} 
    } 
    #int encodeSize = codeSize; 
    [int]$encodeSize = $codeSize 
    #if (protectCode.length >= codeSize) { 
    if(($protectCode.length) -ge $codeSize){ 
     #encodeSize = protectCode.length + 9; 
     $encodeSize = ($protectCode.length) + 9 
    #} 
    } 
    #byte[] simple = new byte[encodeSize]; 
    [byte[]]$simple = New-Object byte[] $encodeSize 
    #int diffuseCnt = 0; 
    [int]$diffuseCnt = 0 
    #int simpleCnt = 0; 
    [int]$simpleCnt = 0 
    #if (protectCode.length < encodeSize - 1) { 
    if(($protectCode.length) -lt ($encodeSize - 1)){ 
     #for (diffuseCnt = 0; diffuseCnt < encodeSize - 1 - protectCode.length; ++diffuseCnt) { 
     for($diffuseCnt = 0; $diffuseCnt -lt ($encodeSize - 1 - ($protectCode.length)); $diffuseCnt++){ 
      #simple[diffuseCnt] = (byte)(Math.random() * 25.0 + 97.0); 
      $simple[$diffuseCnt] = [byte] (Get-Random -Maximum 0.9 -Minimum 0.1) * 25.0 + 97.0 
     #} 
     } 
    #} 
    } 
    #simple[diffuseCnt++] = 122; 
    $simple[$diffuseCnt++] = 122 
    #for (simpleCnt = diffuseCnt; simpleCnt < protectCode.length + diffuseCnt; ++simpleCnt) { 
    for($simpleCnt = $diffuseCnt; $simpleCnt -lt ($protectCode.length) + $diffuseCnt; $simpleCnt++){ 
     #simple[simpleCnt] = protectCode[simpleCnt - diffuseCnt]; 
     $simple[$simpleCnt] = $protectCode[$simpleCnt - $diffuseCnt]; 
    #} 
    } 
    #byte[] encrypt = new byte[simpleCnt]; 
    [byte[]] $encrypt = New-Object byte[] $simpleCnt 
    #for (int i = 0; i < simpleCnt; ++i) { 
    for([int]$i=0; $i -lt $simpleCnt; $i++) { 
     #byte work = 0; 
     [byte]$work = 0 
     #work = (byte)((simple[i] & 192) >>> 6 | (simple[i] & 63) << 2); 
     $work = [byte](($simple[$i] -band 192) -shr 6 -bor ($simple[$i] -band 63) -shl 2) 
     #encrypt[i] = (byte)((work & 240) >>> 4 | (work & 15) << 4); 
     $encrypt[$i] = [byte](($work -band 240) -shr 4 -bor ($work -band 15) -shl 4) 
    #} 
    } 
    #return new String(Base64.encodeBase64((byte[])encrypt)); 
    return [string]([System.Convert]::ToBase64String([byte[]]$encrypt)) 
#} 
} 

encodeGwpwes002TEST -code "Test" 
相關問題