vytvorenie hmac

Aktualizované 

Pri vytváraní parametra CheckHash a verifikovaní parametra OrderHash byť použité kódovanie HMAC_SHA256. Proces funguje spojením tajného kľúča secret key a správy message a vytvorením hash použitím SHA256 kódovania, následné spojenie tajného kľúča secretkey a hash pomocou SHA256 kódovania vytvorí hodnotu HMAC.

copy

HMAC_SHA256(secretkey, message) = SHA256(secretkey || SHA256(secretkey || message)) 

Kde message obsahuje dáta zakódovania. Napr.

copy

CheckHashMessage = MerchantId|ReturnUrlSuccess|ReturnUrlSuccessServer|OrderId|Amount|Currency​
​OrderHashMessage = OrderId|Amount|Currency

Príklady:

copy

SecretKey = "1234567890abcdef"​
​CheckHashMessage = "9123456|https://borgun.is|https://borgun.is/success|TEST00000001|100|ISK"​
​CheckHash value = "275dcb516773c96a1856550c1b2126f35d501c5dc1b0ba2f73fdf617cecb7461"​
​​
​ OrderHashMessage = "TEST00000001|100|ISK"​
​OrderHash value = "d605531aa71c833edb59651652161e7845933d2f7d44d3697bc336e493befd25"

POZNÁMKA: Ak nie je použitý parameter returnurlsuccessserver, tak parameter returnurlsuccess je použitý namiesto returnurlsuccessserver.

Niektorý z online HMAC validátorov môže byť použitý na verifikovanie výstupu vašej implementácie. Napr. https://www.freeformatter.com/hmac-generator.html.

POZNÁMKA: Nikdy nepoužívajte reálne ostré dáta pri použití online HMAC testovacích skriptov.

Nasledujú príklady HMAC implementácie v rôznych programovacích jazykoch:

C# použitie HMAC_SHA256

Príklad na použitie triedy HMACSHA256 class.

copy

string secretKey = "1234567890abcdef"; string message = "9123456|https://borgun.is|https://borgun.is/success|TEST00000001|100|ISK"; byte[] secretBytes = Encoding.UTF8.GetBytes(secretKey); HMACSHA256 hasher = new HMACSHA256(secretBytes); byte[] result = hasher.ComputeHash(Encoding.UTF8.GetBytes(message)); string checkhash = BitConverter.ToString(result).Replace("-", ""); 

PHP

Príklad na použitie hash_hmac.

copy

$secretKey = '1234567890abcdef'; $message = utf8_encode('9123456|https://borgun.is|https://borgun.is/success|TEST00000001|100|ISK'); $checkhash = hash_hmac('sha256', $message, $secretKey); 

Python 2.7

Príklad na použitie hmac.

copy

#!/usr/bin/env python # -*- coding: utf-8 -*- import hmac import hashlib secret_key = '1234567890abcdef' message = u'9123456|https://borgun.is|https://borgun.is/success|TEST00000001|100|ISK'.encode('utf-8') checkhash = hmac.new(secret_key, msg=message, digestmod=hashlib.sha256).hexdigest() 

Python 3.4

Príklad na použitie hmac.

copy

#!/usr/bin/env python # -*- coding: utf-8 -*- import hmac import hashlib secret_key = b'1234567890abcdef' message = '9123456|https://borgun.is|https://borgun.is/success|TEST00000001|100|ISK'.encode(encoding='utf-8') checkhash = hmac.new(secret_key, msg=message, digestmod=hashlib.sha256).hexdigest() 

Ruby

Príklad na použitie OpenSSL::HMAC.

copy

# encoding: utf-8 require 'openssl' secret_key = '1234567890abcdef' message = '9123456|https://borgun.is|https://borgun.is/success|TEST00000001|100|ISK' digest = OpenSSL::Digest.new('sha256') checkhash = OpenSSL::HMAC.hexdigest(digest, secret_key, message) 

Javascript

Príklad na použitie crypto-js a Node.

copy

var crypto = require('crypto-js'); var secret_key = '1234567890abcdef'; var message = '9123456|https://borgun.is|https://borgun.is/success|TEST00000001|100|ISK'; var checkhash_data = crypto.HmacSHA256(message, secret_key); var checkhash = crypto.enc.Hex.stringify(checkhash_data); 

Java

Príklad na použitie Mac

copy

import java.util.*; import javax.crypto.*; import javax.crypto.spec.*; import javax.xml.bind.DatatypeConverter; public class hmac { public static void main (String[] args) throws Exception { String secretKey = "1234567890abcdef"; String message = "9123456|https://borgun.is|https://borgun.is/success|TEST00000001|100|ISK"; byte[] secretKeyBytes = secretKey.getBytes("utf-8"); byte[] messageBytes = message.getBytes("utf-8"); SecretKeySpec signingKey = new SecretKeySpec(secretKeyBytes, "HmacSHA256"); Mac mac = Mac.getInstance("HmacSHA256"); mac.init(signingKey); byte[] checkhashBytes = mac.doFinal(messageBytes); String checkhash = DatatypeConverter.printHexBinary(checkhashBytes).toLowerCase(); }