我们有许多使用扫描到文件夹选项的Lanier MFP允许人们获取文档,我们开始通过强制重置密码来对他们使用的AD密码实施更多安全措施。
不幸的是,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));
例如,如果我将文本'Test'传递给它,我会得到字符串“HVhcmtla25meHVncHQ ==”
然而,这对我来说没用,因为我无法将其重新置于PowerShell中以传递给打印机,如果我使用PowerShell将其编码为Base64,则会显示为“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
答案 0 :(得分:0)
请试试这个。它是GWPWES002的编码。我在这里找到了一个旧的java版本。 https://www.dropbox.com/s/3324g84x0l4bnon/GwpwesCharacterEncoding.java?dl=0
这种"编码"有一个弱点。编码的前部只是随机填充。 pack部分是存储实际字符串的位置。只需几次在同一个字符串上运行脚本就可以指出这个错误。
encodeGwpwes002 -code "a"
生成了这个哈希
直到eWA ==的所有内容都是随机填充意味着" eWA ==" ==" a"np6eWFieWJ6eWA ==
np6eWJ5YWFieWA ==
WFienlhYnlieWA ==
nlhYnp5Ynp6eWA ==
nlieWFieWJ6eWA ==
同样适用于" aaaaaaaa"
np5YWJ5YnlieWFhYWFhYWFg =
np5Ynp6eWJ6eWFhYWFhYWFg =
nlienp6eWJ6eWFhYWFhYWFg =
WJ5YWJ6enlieWFhYWFhYWFg =
意思是
" eWFhYWFhYWFg ="是" aaaaaaaa"。
您提供的密码" test",操作的一个例子是:
HVhcmtla25meHVncHQ == IS" test" :: 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"