리눅스맨

c# base64, c# hmac sha256, c# php hmac sha256, php c# base64

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==
c# base64, c# hmac sha256, c# php hmac sha256, php c# base64

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

c# base64, c# hmac sha256, c# php hmac sha256, php c# base64


게시됨

카테고리

작성자

태그: