将PowerShell日期转换为JavaScript日期(Unix时间)

问题描述 投票:0回答:1

我试图从zscaler中混淆API密钥

https://help.zscaler.com/zia/api-getting-started,但他们没有PowerShell的文档。

我做了从javascript到powershell的转换:这里是您的信息的功能

Function Obfuscate {

PARAM (

[Parameter(Mandatory=$true,HelpMessage="apiKey")][String] $key,

[Parameter(Mandatory=$true,HelpMessage="Timestamp")]$timestamp

)

$apiKey=""

$high=$Timestamp.substring($timestamp.length -6)

$low=$high -shr 1

$low=$low.ToString()

While ($low.length -lt 6) {$low="0"+$low}

For ($i=0;$i -lt $high.length; $i++) {

$apiKey+=$key.substring($high.substring($i,1) -shr 0,1)

}

For ($i=0;$i -lt $low.length; $i++) {

$apiKey+=$key.substring(($low.substring($i,1) -shr 0)+2,1)

}

return $apiKey

}

它只是一个问题,非常烦人:

javascript / java / python中的Date.now()(用于timestamp变量)和son返回一个13位数字(1519984360183)(应该是1970/01/01 00:00:00:00以来的第二个时间)

PowerShell中的类似功能:

$timestamp=([Math]::Floor([decimal](Get-Date(Get-Date).ToUniversalTime()-uformat "%s"))).tostring()

要么

$timestamp = (Get-Date -UFormat %s)

返回一个15位数字

运行脚本以发送带有15位时间戳的发布请求会产生错误,因为Zscaler服务器无法识别混淆的api密钥。

任何的想法 ?

javascript powershell datetime data-conversion
1个回答
1
投票
  • PowerShell的Get-Date -UFormat %s以(小数)秒返回(字符串化)值,
  • 而JavaScript使用(整数)毫秒。

两者都是Unix time的表示,但是在不同的单位(并且具有不同的数字类型)。

因此,您需要乘以1000并将结果转换为整数(如果最终需要字符串表示,则将结果转换为[string]或应用.ToString()):

$timestamp = [Math]::Floor(1000 * (Get-Date ([datetime]::UtcNow) -UFormat %s))
  • ([datetime]::UtcNow)将当前时间点作为UTC时间戳返回,这是必要的,因为Unix时间以UTC表示;它是(Get-Date).ToUniversalTime()的更短(和更快)的等价物
  • 通过使用1000作为乘法的LHS,* PowerShell自动将RHS转换为数字 - 在这种情况下为[double]
  • [Math]:Floor()然后截断那个双倍(掉落小数部分);如果你需要一个实际的整数类型,请转换为[int64]
© www.soinside.com 2019 - 2024. All rights reserved.