즐겁게 개발을...

개발보다 게임이 더 많이 올라오는 것 같은...

개발/C#

C#과 Node.js(TS)에서 각각 Sha256 Hash 같은 값 나오게 하기

다물칸 2024. 2. 15. 14:06
728x90

라이브러리를 사용해서 해시값을 구하면 각각 다른 값이 나오거나 해서 쌩짜로 만들었다. (보고 베꼈다.)

 

원래 출처에서는 Timestamp를 넣어서 해시값을 구하는데 이렇게 되면 로직이 복잡해져서 그냥 빼버렸다. 상황에 따라서 넣어서 사용하자. 대신 Keystring을 랜덤화해서 사용해도 될 것 같다. 

 

C# 소스

        public static string GenerateHMAC(string payload, string key = "keystring")
        {
            // 키 생성
            var hmac_key = Encoding.UTF8.GetBytes(key);

            // Timestamp 생성
            //var timespan = (timestamp - new DateTime(1970, 1, 1, 0, 0, 0));
            //var hmac_timestamp = (long)timespan.TotalMilliseconds;

            // HMAC-SHA256 객체 생성
            using (HMACSHA256 sha = new HMACSHA256(hmac_key))
            {
                var bytes = Encoding.UTF8.GetBytes(payload);
                string base64 = Convert.ToBase64String(bytes);
                var message = Encoding.UTF8.GetBytes(base64);

                // 암호화
                var hash = sha.ComputeHash(message);

                // base64 컨버팅
                return Convert.ToBase64String(hash);
            }
        }

 

Node.js (TypeScript) 소스

import crypto from 'crypto'

export function GenerateHMAC(payload: string) {
  var hmac = crypto.createHmac('sha256', 'keystring'); // key입력대신 넣음.
  var message = new Buffer(payload).toString('base64')
  hmac.write(message);
  hmac.end()
  const hash: string = new Buffer(hmac.read()).toString('base64')
  return hash;
}

 

반응형