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

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

  • php
  • hmac

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

answer

103

Hướng dẫn dùng hmac-sha256 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

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

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

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

Đâ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

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

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ẻ

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

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

Có thể bạn quan tâm

Hướng dẫn dùng hmac-sha256 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
  • 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.