2012-07-31 3 views
1

시스템을 은행 지불 시스템에 연결하려고합니다. 문제는 완전한 재앙이 아니라면 그들의 문서가 대부분 올바르지 않다는 것입니다.C# 코드를 Ruby 코드로 번역

3D 보안 시스템의 문서에서 은행은 html 양식을 작성하여 시스템에 제출하도록 요청합니다. 양식에는 데이터와 데이터의 SHA1 해시가 포함되어야합니다. 여러 번 시도했지만 은행 시스템이 항상 "Hash not correct"오류를 반환했습니다.

예제 C# 코드를 검사 한 후 해시 결과를 얻는 데 사용한 함수를 발견했습니다. 문제는 함수가 데이터를 해싱하기보다는 데이터에 다른 작업을하는 것입니다. 그리고 더 큰 문제는 해쉬 된 문자열에이 코드가 무엇을 하는지를 알 수 없다는 것입니다. 나는 대부분의 시간 루비 개발자입니다 (

public static string CreateHash(string notHashedStr) 
    { 
     SHA1 sha1 = new SHA1CryptoServiceProvider(); 
     byte[] notHashedBytes = System.Text.Encoding.ASCII.GetBytes(notHashedStr); 
     byte[] hashedByte = sha1.ComputeHash(notHashedBytes); 
     string hashedStr = System.Convert.ToBase64String(hashedByte); 

     return hashedStr; 
    } 

나는 닷넷 프레임 워크에 거의 경험이 나는 맥 오전 또한, 그래서 쉽게 코드를 테스트 할 수 없으며, MSDN 나를 위해 확실히이다 나는 C를 충분히 안다.) 누구나이 함수가 해시 할 문자열에 어떤 역할을하는지 설명 할 수 있다면 매우 기쁠 것입니다.

+0

Eek !! 너 무슨 소리하는거야? ;-) (off-topic에 대해 유감스럽게 생각합니다) – Jeroen

+0

해싱이 [OAuth] (http://oauth.net/core/1.0/) –

답변

2

매우 간단합니다.

  1. notHashedStr에서 ASCII 인코딩 된 바이트를 가져옵니다.
  2. 해당 바이트에서 SHA1 해시를 생성하십시오.
  3. 해시를 Base64로 인코딩 된 문자열로 변환하십시오.
  4. 그 Base64-SHA1-ASCII-String을 반환하십시오.

나는 루비를 한 번도 쓰지 않았지만, 이렇게 보일 것입니다.

require 'digest/sha1' 
returnValue = Digest::SHA1.base64digest 'notHashedStr' 
+1

+1이라고 말하면 +1 base64digest는 루비 1.9에서만 사용 가능합니다. 1.8에서 다음과 같이 할 수 있습니다 :'Base64.encode64 (Digest :: SHA1.digest ('notHashedStr')'. – Candide

+0

+1 cool thanks :) –

관련 문제