我试图从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年1月1日00:00:00:00以来的秒数。
Powershell中类似的函数:
$timestamp=([Math]::Floor([decimal](Get-Date(Get-Date).ToUniversalTime()-uformat "%s"))).tostring()
或者
$timestamp = (Get-Date -UFormat %s)
返回一个15位数字
运行脚本以使用15位时间戳发送POST请求会出现错误,因为Zscaler服务器无法识别混淆的API密钥。
有什么想法吗?