[英]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位數字時間戳的發布請求會產生錯誤。
任何想法 ?
Get-Date -UFormat %s
以(分數) 秒返回一個(字符串化的)值, 兩者都是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.