Hướng dẫn dùng sha256 hmac trong PHP

Có cách nào để tạo chữ ký HmacSHA256 của một chuỗi trong php không?

Nội dung chính

  • Đăng nhập để trả lời câu hỏi
  • Có thể bạn quan tâm
  • Đăng nhập để trả lời câu hỏi
  • Có thể bạn quan tâm
  • Not the answer you're looking for? Browse other questions tagged c# php hashcode or ask your own question.

  • php
  • hmac

49 hữu ích 0 bình luận 75k xem chia sẻ

answer

103

Hướng dẫn dùng sha256 hmac trong PHP

Sử dụng hash_hmac:

$sig = hash_hmac('sha256', $string, $secret)

$secretChìa khóa của bạn ở đâu .

103 hữu ích 5 bình luận chia sẻ

answer

16

Các hash_hmac()chức năng có thể giúp đỡ, ở đây:

Tạo giá trị băm có khóa bằng phương pháp HMAC


Ví dụ: phần mã sau:

$hash = hash_hmac('sha256', 'hello, world!', 'mykey');
var_dump($hash);

Cung cấp đầu ra sau:

string '07a932dd17adc59b49561f33980ec5254688a41f133b8a26e76c611073ade89b' (length=64)


Và, để có được danh sách các thuật toán băm có thể được sử dụng, hãy xem hash_algos().

16 hữu ích 0 bình luận chia sẻ

answer

8

Đây là một ví dụ về ký kết giao dịch datatrans (giải pháp thanh toán điện tử của Thụy Sĩ) trước khi gọi PSP với HMAC-SHA-256 .

Hy vọng nó có thể giúp một số nhà phát triển.

$hmacKey    = 30911337928580013;

$merchantId = 1100004624;
$amount     = $total * 100;
$currency   = 'EUR';
$refno      = $orderId;

// HMAC Hex to byte
$secret     = hex2bin("$hmacKey");

// Concat infos
$string     = $merchantId . $amount. $currency . $refno;

// generate SIGN
$sign       = bin2hex(hash_hmac('sha256', $string, $secret)); 

Lưu ý: ID người bán và khóa HMAC đều lấy từ tài liệu Datatrans có sẵn tại đây: https://admin.sandbox.datatrans.com/showcase/doc/Technical_Implementation_Guide.pdf

8 hữu ích 3 bình luận chia sẻ

answer

0

Tôi không thể trả lời do thiếu danh tiếng, nhưng cách @Melomans kết hợp với câu trả lời của ZPiDER dẫn đến việc chỉ sử dụng

$hash       = hash_hmac('sha256', $string, $secret);

để ký Datatrans chính xác

0 hữu ích 0 bình luận chia sẻ

Đăng nhập để trả lời câu hỏi

Có thể bạn quan tâm

Có cách nào để tạo chữ ký HmacSHA256 của một chuỗi trong php không?

Nội dung chính

  • Đăng nhập để trả lời câu hỏi
  • Có thể bạn quan tâm
  • Not the answer you're looking for? Browse other questions tagged c# php hashcode or ask your own question.
  • php
  • hmac

49 hữu ích 0 bình luận 75k xem chia sẻ

answer

103

Sử dụng hash_hmac:

$sig = hash_hmac('sha256', $string, $secret)

$secretChìa khóa của bạn ở đâu .

103 hữu ích 5 bình luận chia sẻ

answer

16

Các hash_hmac()chức năng có thể giúp đỡ, ở đây:

Tạo giá trị băm có khóa bằng phương pháp HMAC


Ví dụ: phần mã sau:

$hash = hash_hmac('sha256', 'hello, world!', 'mykey');
var_dump($hash);

Cung cấp đầu ra sau:

string '07a932dd17adc59b49561f33980ec5254688a41f133b8a26e76c611073ade89b' (length=64)


Và, để có được danh sách các thuật toán băm có thể được sử dụng, hãy xem hash_algos().

16 hữu ích 0 bình luận chia sẻ

answer

8

Đây là một ví dụ về ký kết giao dịch datatrans (giải pháp thanh toán điện tử của Thụy Sĩ) trước khi gọi PSP với HMAC-SHA-256 .

Hy vọng nó có thể giúp một số nhà phát triển.

$hmacKey    = 30911337928580013;

$merchantId = 1100004624;
$amount     = $total * 100;
$currency   = 'EUR';
$refno      = $orderId;

// HMAC Hex to byte
$secret     = hex2bin("$hmacKey");

// Concat infos
$string     = $merchantId . $amount. $currency . $refno;

// generate SIGN
$sign       = bin2hex(hash_hmac('sha256', $string, $secret)); 

Lưu ý: ID người bán và khóa HMAC đều lấy từ tài liệu Datatrans có sẵn tại đây: https://admin.sandbox.datatrans.com/showcase/doc/Technical_Implementation_Guide.pdf

8 hữu ích 3 bình luận chia sẻ

answer

0

Tôi không thể trả lời do thiếu danh tiếng, nhưng cách @Melomans kết hợp với câu trả lời của ZPiDER dẫn đến việc chỉ sử dụng

$hash       = hash_hmac('sha256', $string, $secret);

để ký Datatrans chính xác

0 hữu ích 0 bình luận chia sẻ

Đăng nhập để trả lời câu hỏi

Có thể bạn quan tâm

sử dụng .NET và C #, tôi cần cung cấp một chuỗi toàn vẹn bằng HMAC SHA512 cho máy chủ PHP. Sử dụng trong C #:

Encoding encoding = Encoding.UTF8;
byte[] keyByte = encoding.GetBytes(key);
HMACSHA512 hmacsha512 = new HMACSHA512(keyByte);
byte[] messageBytes = encoding.GetBytes(message);
byte[]  hashmessage = hmacsha512.ComputeHash(messageBytes);
return(ByteToString(hashmessage).toUpper());

Nhưng nó không khớp với mã PHP hash_hmac () PHP:

$hmac = strtoupper(hash_hmac($pbx_hash, $msg, $binKey));

Tôi cố gắng thay đổi mã hóa trong C # (utf8, ASCII, Unicode) mà không thành công.

Tôi đã thử nhiều giải pháp được tìm thấy trên mạng nhưng không có gì cung cấp cùng một chuỗi :(

Tôi không thể thay đổi mã PHP và không thấy có gì sai trong C #

Chỉnh sửa Đây là ByteToString(sao chép từ nhận xét):

static string ByteToString(byte[] buff)
{
    string sbinary = "";
    for (int i = 0; i < buff.Length; i++)
    {
        sbinary += buff[i].ToString("X2"); /* hex format */
    }
    return (sbinary);
}    

Sau nhiều lần tets, tôi nhận thấy rằng tôi nhận được kết quả tương tự nếu khóa băm PHP_hmac là một chuỗi, không phải là một Mảng byte. Có vẻ như vấn đề là với hàm chuyển đổi PHP $ binKey = pack ("H *", $ keyTest);

29 hữu ích 3 bình luận 27k xem chia sẻ

this is my PHP code:

hash_hmac( "sha256", utf8_encode( $filename ), utf8_encode( $password ) );

and this is my C# code:

var hmacsha256 = new HMACSHA256( Encoding.UTF8.GetBytes( password ) );
hmacsha256.ComputeHash( Encoding.UTF8.GetBytes( filename ) );

unfortunately both results differ. Can anyone give me a hint?

asked Mar 30, 2009 at 21:11

tanasciustanascius

52.1k21 gold badges111 silver badges133 bronze badges

My C# is not the best but i got it to work, what you need to do is to convert your byte array results to hex.

PHP

$hash = hash_hmac( "sha256", utf8_encode("Filename"), utf8_encode("Password"));
echo $hash;
// 5fe2ae06ff9828b33fe304545289a3f590bfd948ca9ab731c980379992ef41f1

C#

string password = "Password";
string filename = "Filename";

var hmacsha256 = new HMACSHA256(Encoding.UTF8.GetBytes(password));
hmacsha256.ComputeHash(Encoding.UTF8.GetBytes(filename));

foreach(byte test in hmacsha256.Hash)
{
    Console.Write(test.ToString("X2"));
}
// 5FE2AE06FF9828B33FE304545289A3F590BFD948CA9AB731C980379992EF41F1

answered Mar 30, 2009 at 23:07

Ólafur WaageÓlafur Waage

67.2k19 gold badges140 silver badges194 bronze badges

1

Not the answer you're looking for? Browse other questions tagged c# php hashcode or ask your own question.