문제

나는 휴식 웹 서비스를 사용하는 응용 프로그램을 개발하고 있습니다. 기술 문서에 따르면 요청에서 일부 문자열의 SHA256 해시를 통과해야한다고합니다.

예제 요청 (문서)에서 문자열 :

hn-rw2zhywlluykkll5zo_7lwjvkrbshzpb5cd1expires = 1893013926label [0] = any/somestatistics = 1d, 2d, 7d, 28d, 30d, lifetimestatus = upl, livetitle = a.

실행 후 :

digest = Digest::SHA256.digest(string_to_sign)
signature = Base64::encode64(digest).chomp.gsub(/=+$/, '')

해시를 초래합니다 :

yryun2zo+vvxisnp/vkqm5cl6dpzoin7mnes0izj06u

이 예는 문서가 루비 개발자를위한 것이므로 루비에 있습니다.

C#에서 내 응용 프로그램을 개발하고 정확히 동일한 문자열에 대해 실행할 때 다음과 같습니다.

byte[] rawHash = sha256.ComputeHash(rawRequest, 0, rawRequest.Length);
string friendlyHash = Convert.ToBase64String(rawHash);

후행 "="표지판을 제거합니다.

vw8pl/kxnjcebyhtfnimikxzdiunysff2ujsow8hyiw

따라서 응용 프로그램이 실행되지 않아 서명 불일치 오류가 발생합니다.

문자열을 해싱 앞에 바이트 배열로 변환하면서 인코딩을 변경하려고 시도했지만 아무것도 변경되지 않았습니다.

어떤 아이디어?

도움이 되었습니까?

해결책

문서를 기반으로합니다 여기, 당신은 당신의 줄에 - (대시)를 놓치고 있습니다. Acrobat은 문서의 복사 페이스트로 도움이되는 것 같습니다 ...

다음은 예제와 동일한 값을 얻는 몇 가지 코드입니다 (Final =).

    string s = "hn-Rw2ZH-YwllUYkklL5Zo_7lWJVkrbShZPb5CD1expires=1893013926label[0]=any/somestatistics=1d,2d,7d,28d,30d,31d,lifetimestatus=upl,livetitle=a";

    SHA256Managed sh = new SHA256Managed();
    byte[] request = System.Text.UTF8Encoding.UTF8.GetBytes(s);
    sh.Initialize();
    byte[] b4bbuff = sh.ComputeHash(request, 0, request.Length);

    string b64 = Convert.ToBase64String(b4bbuff);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top