Nhảy tới nội dung

HMAC Signatures

Để đảm bảo tính xác thực và tính toàn vẹn dữ liệu của các request, Fundiin yêu cầu các request này được ký. Chữ ký này được dựa trên HMAC (Hash-based Message Authentication Code) được tính toán bằng cách sử dụng request body và secret key, chỉ có bạn và Fundiin biết.

Chữ ký

Trước khi gửi một yêu cầu tới Fundiin, bạn cần tạo chữ ký và gán vào header. Khi Fundiin nhận được yêu cầu, chữ ký cũng được tạo bằng cách sử dụng request body và secret key, được lưu trữ trên phía Fundiin. Bằng cách xác minh rằng cả hai chữ ký là giống nhau, Fundiin có thể đảm bảo yêu cầu là từ đối tác và không bị sửa đổi trong quá trình truyền tải.

Xác minh Thông báo thanh toán

Bạn cũng có thể xác minh các thông báo thanh toán nhận được từ Fundiin bằng cách tạo chữ ký tương ứng và so sánh nó với chữ ký được gán trong header. Điều này cho phép bạn xác nhận rằng thông báo thanh toán đã được gửi bởi Fundiin và không bị sửa đổi trong quá trình truyền tải.

Tạo Chữ ký

Fundiin sử dụng thuật toán HMAC SHA-256 để tạo chữ ký

signature = HMAC(algorihtm, secretKey, body)

With:

  • algorithm: Thuật toán bảo mật. Giá trị mặc định của thuật toán được sử dụng là HMAC SHA-256.
  • secretKey: Key được cung cấp bởi Fundiin trong quá trình đăng ký.
  • body: Dữ liệu được sử dụng để tạo chữ ký

Vui lòng đảm bảo thực hiện quá trình tạo chữ ký này chính xác để đảm bảo việc giao tiếp với API của Fundiin là an toàn và xác thực.

Chữ ký HMAC SHA-256 được tạo bằng cách sử dụng request body và secret key được cung cấp, sau đó được mã hóa dưới định dạng hexa.

Cách tạo chữ ký HMAC SHA-256 cho các ngôn ngữ lập trình thông dụng:

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

public class SignatureGenerator {

public static String generateHmacSHA256Signature(String secretKey, String data) {
try {
Mac hmacSHA256 = Mac.getInstance("HmacSHA256");
SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes(), "HmacSHA256");
hmacSHA256.init(secretKeySpec);
byte[] hash = hmacSHA256.doFinal(data.getBytes());

StringBuilder result = new StringBuilder();
for (byte b : hash) {
result.append(String.format("%02x", b));
}
return result.toString();
} catch (NoSuchAlgorithmException | InvalidKeyException e) {
e.printStackTrace();
return null;
}
}
}