Cố gắng tạo chữ ký HMAC SHA256 cho 3Commas, tôi sử dụng các tham số tương tự từ ví dụ chính thức, nó sẽ tạo ra: "30F678A157230290E00475CFFFCCBC92AE3659D94C145A2C0E9D0F Nhưng tôi tạo ra: "17A656C7DF48FA2DB615BFC719627FC94E59265E6AF18CC7714694EA5B58A11A" Đây là những gì tôi đã thử:
Bất cứ ai có thể giúp tôi ra? Hỏi ngày 24 tháng 12 năm 2018 lúc 8:14Dec 24, 2018 at 8:14
1 Hãy thử sử dụng mô -đun
Điều này cho kết quả mong muốn:
Đã trả lời ngày 24 tháng 12 năm 2018 lúc 8:36Dec 24, 2018 at 8:36
2 Tôi đã thực hiện nó bằng cách sử dụng một cách tiếp cận khác vài năm trước.
https://www.gauravvjn.com/generate-hmac-sha256-signature-in-python/ Đã trả lời ngày 12 tháng 11 năm 2019 lúc 15:47Nov 12, 2019 at 15:47
Gaurav Jaingaurav JainGaurav Jain 1.4591 Huy hiệu vàng22 Huy hiệu bạc 30 Huy hiệu Đồng1 gold badge22 silver badges30 bronze badges Tôi đã chơi xung quanh một chút với API Slack, mà tôi sẽ có một bài viết dài hơn một chút. Một phần của tích hợp yêu cầu tạo ra chữ ký HMAC SHA256 để xác minh các yêu cầu là từ Slack. Có quá nhiều kết quả tìm kiếm hữu ích và một số trong số chúng giống như các tài liệu mô -đun HMAC don lồng bao gồm các ví dụ. Dưới đây là một số ghi chú nhanh cho mọi người trong tương lai cố gắng tương tự. Bài đăng H/T đến Joe Kampschmidt, trong đó bao gồm việc ký tốt. Bước đầu tiên là thiết bị ứng dụng thử nghiệm của bạn là nắm bắt các tiêu đề đầy đủ và cơ thể thô từ phản hồi để bạn có thể xác minh việc triển khai của mình. Nếu bạn sử dụng bình cho máy chủ của mình, việc nhận được cơ thể yêu cầu RAW sẽ hơi phức tạp, vì nó sẽ cố gắng một cách hữu ích để chuyển đổi dữ liệu với loại nội dung 0 thành từ điển thay vì chuỗi thô. Chuyển đổi này thành một mặt nạ từ điển hầu hết các cách rõ ràng để truy cập vào chuỗi thô.May mắn thay, bạn có thể sử dụng request.get_data để có được cơ thể thô miễn là bạn làm điều đó trước khi gọi 1. Nó hoạt động tốt để gọi 2 và sau đó 1, vì vậy hãy cẩn thận để sắp xếp chúng một cách chính xác.def recall_post(request): # must not call request.form here headers = request.headers() data = request.get_data() print(headers) print(data) # calling request.form is fine now request.form return "%s %s" % (headers, data) Khi bạn có các tiêu đề và dữ liệu của Thoes, bạn sẽ có thể thực hiện một lần chạy thử để tạo chữ ký và so sánh nó với chữ ký đã gửi. Các giá trị bạn cần trích xuất từ yêu cầu gửi đến là: timestamp = request.headers['X-Slack-Request-Timestamp'] expected_sig = request.headers['X-Slack-Signature'] Bạn cũng cần phải vào trang ứng dụng của mình trong bảng điều khiển Slack để có được bí mật ký kết. Khi bạn có các mảnh này cùng với cơ thể bài thô được truy xuất qua 2, thì bạn có thể sử dụng các thành phần đó để kiểm tra việc tạo chữ ký của riêng bạn.import hmac, hashlib body = b'token=etc&team_id=etc&...' timestamp = b'100000000000' base = 'v0:%s:%s' % (timestamp.decode('utf-8'), body.decode('utf-8')) secret = b'1234' computed = hmac.new(secret, base.encode('utf-8'), digestmod=hashlib.sha256).hexdigest() sig = 'v0=%s' % (computed,) print(sig) Nếu bạn sử dụng các giá trị thực, điều này sẽ phù hợp chính xác với chữ ký từ chữ ký chùng trong tiêu đề 5.Kéo tất cả các điều này lại với nhau, chức năng máy chủ sẽ trông giống như: def verify(request,secret): body = request.get_data() timestamp = request.headers['X-Slack-Request-Timestamp'] sig_basestring = 'v0:%s:%s' % (timestamp, body.decode('utf-8')) computed_sha = hmac.new(secret, sig_basestring.encode('utf-8'), digestmod=hashlib.sha256).hexdigest() my_sig = 'v0=%s' % (computed_sha,) slack_sig = request.headers['X-Slack-Signature'] if my_sig != slack_sig: err_str = "my_sig %s does not equal slack_sig %s" % \ (my_sig, slack_sig)) raise Exception(err_str) def recall_post(request): signing_secret = b'your secret from some config tool' verify(request, signing_secret) return "Signatures match, yay." Bây giờ miễn là bạn gọi 6 trong người xử lý của bạn, bạn có thể tự tin rằng các yêu cầu đến thực sự là từ Slack. Hy vọng rằng điều này sẽ cứu ai đó một vài phút! |