簡體   English   中英

將PowerShell日期轉換為JavaScript日期(Unix時間)

[英]Convert a PowerShell date to a JavaScript date (Unix time)

我正試圖從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()(用於時間戳變量),兒子返回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位數字

由於Zscaler服務器無法識別混淆的api密鑰,因此運行腳本以發送帶有15位數字時間戳的發布請求會產生錯誤。

任何想法 ?

  • 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][int64]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM