콘텐츠로 건너뛰기

c# Base64 Decoding from php encoding AND HMAC SHA256

    PHP에서 Base64 인코딩 하고 C#에서 디코딩

    첫번째는 단순히 Base64 인코딩을 C#에서 디코딩하는 코드

    두번째는 hash_hmac(‘sha256’) 함수를 이용하여 PHP에서 인코딩하고 C#에서 디코딩 하는 코드

    Just Base 64 Encoding

    PHP Code

    $phpEncodingString = "AAAAAA" . "|" . "BBBBBB";
    echo base64_encode($phpEncodingString );
    
    //output -> QUFBQUFBfEJCQkJCQg==

    C# Code

    string fromPHPencodingString = "QUFBQUFBfEJCQkJCQg==";
    byte[] byte64 = Convert.FromBase64String(fromPHPencodingString);
    string decodingString = Encoding.UTF8.GetString(byte64);
    Console.WriteLine("Result: {0}", decodingString);
    
    //output -> Result: AAAAAA|BBBBBB

    Base 64 Encoding with hash_hmac(‘sha256’)

    PHP Code

    $key = "AAAAA";
    $message = "BBBBB";
    
    $hashString = hash_hmac('sha256', $message, $key);
    echo base64_encode(strtoupper($hashString ));
    
    //output -> NjZDNTc2NTBCODhBMzcyNTFDMjgzNzA1QkUwNUJEOEI0MDNDMUU3QzMwMjEzRkQ1MkIwNjI3QTJFMjAzQjY2RA==

    C# Code

    string key = "AAAAA";
    string messeage = "BBBBB";
    
    var keyByte = encoding.GetBytes(key);
    using (var hmacsha256 = new HMACSHA256(keyByte))
    {
    	hmacsha256.ComputeHash(encoding.GetBytes(message));
    
    	MessageBox.Show(ByteToString(hmacsha256.Hash));
    
    	string fromPHPencodingString = ByteToString(hmacsha256.Hash);
    	byte[] basebyte = System.Text.Encoding.UTF8.GetBytes(fromPHPencodingString);
    	string base64String = Convert.ToBase64String(basebyte);
    	MessageBox.Show(String.Format("Result: {0}", base64String));
    }
      
    
    static string ByteToString(byte[] buff)
    {
    	string sbinary = "";
    	for (int i = 0; i < buff.Length; i++)
    		sbinary += buff[i].ToString("X2"); /* hex format */
    	return sbinary;
    }
    
    //output -> NjZDNTc2NTBCODhBMzcyNTFDMjgzNzA1QkUwNUJEOEI0MDNDMUU3QzMwMjEzRkQ1MkIwNjI3QTJFMjAzQjY2RA==

    단순 Base64 인코딩은 디코딩 할 경우 문자가 그대로 복원이 되지만 hash_hmac(‘sha256’) 함수를 이용할 경우 원래의 문자열 복구 불가능하므로 인코딩 된 결과물을 바탕으로 비교하여 True / False 구분해야합니다.