PowerShell 스크립트가 Canvas 서버를 호출하여 다른 용도로 사용하기 위해 데이터를 가져와야하는 프로세스를 만드는 작업에 임명되었습니다. 이 질문의 범위 밖입니다.Powershell for Canvas API를 사용하여 hmac-sha256을 작동 시키려고했습니다.
내가 한 첫 번째 작업은 Canvas API가 실제로 어떻게 작동하는지 연구하는 것입니다. 나는 결국이 점을 발견했다. post은 API에 대해 알아야 할 모든 것을 담고있다. API에는 HMAC SHA 256 해시가 필요합니다.
PowerShell에서 같은 스크립트를 만들기 위해 해시를 만드는 작성자 코드를 리버스 엔지니어링하기로 결정했습니다. 여기
내가 노드 JS 응용 프로그램에 넣어 매개 변수 내 약간 수정 코드 (Node.js를) 다음
var crypto = require('crypto')
var url = require('url')
var HMAC_ALG = 'sha256'
var apiAuth = module.exports = {
buildMessage: function(secret, timestamp, uri) {
var urlInfo = url.parse(uri, false);
var query = urlInfo.query ? urlInfo.query.split('&').sort().join('&') : '';
var parts = [ 'GET', urlInfo.host, '', '', urlInfo.pathname, query, timestamp, secret ]
console.log(parts);
return parts.join('\n');
},
buildHmacSig: function(secret, timestamp, reqOpts,message) {
//var message = apiAuth.buildMessage(secret, timestamp, reqOpts);
var hmac = crypto.createHmac(HMAC_ALG, new Buffer(secret))
hmac.update(message)
Console.log(message);
return hmac.digest('base64')
}
}
되어있다
var canvas = require('[filepath]/new_canvas');
var secret = 'mycrazysecret';
var today = new Date();
var timestamp= today.toUTCString();
var regOpts = 'mycrazymessage';
var message = canvas.buildMessage(secret, timestamp, regOpts)
var hmac = canvas.buildHmacSig(secret, timestamp, regOpts,message);
최종 코드 그것은이 'Oexq8/
,536,913,632 : ulAGxSIQXGDVqoXyqk5x + n9cMrc3avcTW9aZk은 = '여기 내 PowerShell을 파일입니다 10function buffer
{
param ($string)
[email protected]()
Foreach ($element in $string.toCharArray()) {$c+= [System.Convert]::ToSByte($element)}
return $c
}
$message = 'GET\n\n\n\nmycrazymessage\n\nFri, 18 Nov 2016 15:29:52 GMT\nmycrazysecret'
$secret = 'mycrazysecret'
$hmacsha = New-Object System.Security.Cryptography.HMACSHA256
$hmacsha.key = buffer -string $secret
$signature = $hmacsha.ComputeHash([Text.Encoding]::UTF8.GetBytes($message))
$signature = [Convert]::ToBase64String($signature)
echo $signature
최종 결과는 'pF92zam81wclnnb8csDsscsSYNQ7it9qLrcJkRTi5rM ='입니다
나는 경우에도 가능한 한 동일한 결과를 생성하기 위해 점점 모르겠지만, 내가 요구하고있는 질문은 왜 다른 결과로 생산되지 않습니다? (키는 동일합니다.)
노드 js 샘플에서 타임 스탬프는 변수이며 PowerShell 파일에서 문자열입니다. 이것이 결과 해시에 영향을 미칠 수 있습니까? –