2009-06-12 3 views
2

일부 REST 웹 서비스를 사용하는 애플리케이션을 개발 중입니다. 기술 문서에 요청시 일부 문자열의 SHA256 해시를 전달해야한다고 나와 있습니다. (문서)에서 예시적인 요청 루비와 C 사이의 SHA 해시 차이점 #

문자열 :

HN-Rw2ZHYwllUYkklL5Zo_7lWJVkrbShZPb5CD1expires = 1893013926label [0] = 모든/somestatistics = 1D, 2D, 7D, 28D, 30D, 31D, lifetimestatus = UPL 해시에

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

결과 :

하는

를 실행 한 후 livetitle = 문서는 루비 개발자를위한 것입니다로 17,451,515,

YRYuN2zO + VvxISNp/vKQM5Cl6Dpzoin7mNES0IZJ06U

이 예는, 루비입니다.

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

및 후행 "="표시, 내가 얻을 제거 : 나는 C#에서와 정확히 동일한 문자열 내 응용 프로그램을 개발하고 있어요

나는 실행할 때

Vw8pl/KxnjcEbyHtfNiMikXZdIunysFF2Ujsow8hyiw

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

해싱 이전의 바이트 배열로 문자열을 변환하는 동안 인코딩을 변경해 보았습니다. 아무 것도 변경되지 않았습니다.

아이디어가 있으십니까?

+0

문자열을 자르지 않았습니까? 어딘가에있을 수 있습니다. – stimms

+0

사용중인 문자열을 보내 주실 수 있습니까? 루비에서 결과를 복제 할 수 없습니다. –

+0

Rayan, 루비에서 해시 한 결과는 무엇입니까? –

답변

8

here 문서에 따르면 문자열에 - (즉 대시)가 없습니다.

(= 당신이 마지막 손질하면 잘은 것) 여기

이 예와 같은 값을 가져옵니다 내가 함께 splatted 일부 코드입니다 ... Acrobat에서 유용하게 문서에서 복사 붙여 넣기에서 그것을 제거하는 것으로 보인다
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); 
+0

당신이 말한대로. 아마 그 질문에 답을 써야합니다. – Stobor

+0

감사합니다! :-) 문제 해결됨 –

관련 문제