2016-11-16 1 views
0

노드로 C# 응용 프로그램을 이식하려고합니다. 응용 프로그램은 내가 다음과 같은 노드 암호를 사용하여 시도한의 Sha256노드에서 C# HMAC Sha256 해당 키

public static string CreateSHA256Signature(string targetText) 
     { 
      string _secureSecret = "E49756B4C8FAB4E48222A3E7F3B97CC3"; 
      byte[] convertedHash = new byte[_secureSecret.Length/2]; 
      for (int i = 0; i < _secureSecret.Length/2; i++) 
      { 
       convertedHash[i] = (byte)Int32.Parse(_secureSecret.Substring(i * 2, 2), System.Globalization.NumberStyles.HexNumber); 
      } 


      string hexHash = ""; 
      using (HMACSHA256 hasher = new HMACSHA256(convertedHash)) 
      { 
       byte[] hashValue = hasher.ComputeHash(Encoding.UTF8.GetBytes(targetText)); 
       foreach (byte b in hashValue) 
       { 
        hexHash += b.ToString("X2"); 
       } 
      } 
      return hexHash; 
     } 
    Response.Write(CreateSHA256Signature("TEST STRING")); 
    // returns 55A891E416F480D5BE52B7985557B24A1028E4DAB79B64D0C5088F948EB3F52E 

를 생성하는이 C#을 기능이 있습니다

console.log(crypto.createHmac('sha256', 'E49756B4C8FAB4E48222A3E7F3B97CC3').update('TEST STRING', 'utf-8').digest('hex')) 
// returns bc0a28c3f60d323404bca7dfc4261d1280ce46e887dc991beb2c5bf5e7ec6100 

가 어떻게 노드에서 같은 C#을 결과를 얻을 수 있습니까?

답변

2

키가 C# 버전과 다릅니다. 16 진수 문자열을 원시 바이트로 변환 해보십시오. 이 방법은 실제 문자열 대신 바이트를 사용하는 것을 알고 있습니다. 예를 들어

: 파이썬 닌자를 들어

var crypto = require('crypto'); 

var key = Buffer.from('E49756B4C8FAB4E48222A3E7F3B97CC3', 'hex'); 
console.log(crypto.createHmac('sha256', key).update('TEST STRING').digest('hex'))