Tôi phải xây dựng một hàm băm ủy quyền từ chuỗi này:
kki98hkl-u5d0-w96i-62dp-xpmr6xlvfnjz:20151110171858:b2c13532-3416-47d9-8592-a541c208f755:hKSeRD98BHngrNa51Q2IgAXtoZ8oYebgY4vQHEYjlmzN9KSbAVTRvQkUPsjOGu4F
Bí mật này được sử dụng cho hàm băm HMAC:
LRH9CAkNs-zoU3hxHbrtY0CUUcmqzibPeN7x6-vwNWQ=
Hash ủy quyền tôi phải tạo là:
P-WgZ8CqV51aI-3TncZj5CpSZh98PjZTYxrvxkmQYmI=
Có một số điều cần chăm sóc:
- Chữ ký phải được xây dựng với HMAC-SHA-256 như được chỉ định trong RFC 2104.
- Chữ ký phải được mã hóa với tương thích URL Base64 như được chỉ định trong RFC 4648 Phần 5 [bảng chữ cái an toàn].
Ngoài ra còn có một số mã giả được đưa ra cho thế hệ:
Signatur[Request] = new String[encodeBase64URLCompatible[HMAC-SHA-256[getBytes[Z, "UTF-8"], decodeBase64URLCompatible[getBytes[S, "UTF-8"]]]], "UTF-8"]
Tôi đã thử nhiều thứ khác nhau trong PHP nhưng chưa tìm thấy thuật toán chính xác. Đây là mã tôi có bây giờ:
if[!function_exists['base64url_encode']]{
function base64url_encode[$data] {
$data = str_replace[array['+', '/'], array['-', '_'], base64_encode[$data]];
return $data;
}
}
$str = "kki98hkl-u5d0-w96i-62dp-xpmr6xlvfnjz:20151110171858:b2c13532-3416-47d9-8592-a541c208f755:hKSeRD98BHngrNa51Q2IgAXtoZ8oYebgY4vQHEYjlmzN9KSbAVTRvQkUPsjOGu4F";
$sec = "LRH9CAkNs-zoU3hxHbrtY0CUUcmqzibPeN7x6-vwNWQ=";
$signature = mhash[MHASH_SHA256, $str, $sec];
$signature = base64url_encode[$signature];
if[$signature != "P-WgZ8CqV51aI-3TncZj5CpSZh98PjZTYxrvxkmQYmI="]
echo "wrong: $signature";
else
echo "correct";
Nó cho chữ ký này:
K9lw3V-k5gOedmVwmO5vC7cOn82JSEXsNguozCAOU2c=
Như bạn có thể thấy, độ dài của 44 ký tự là chính xác. Xin hãy giúp tôi tìm ra sai lầm, vấn đề đơn giản này mất hàng giờ và không có giải pháp nào.
21 tháng 10 năm 2012
Gần đây tôi đã trải qua quá trình tạo SDK cho API trong nhà. API yêu cầu ký vào mọi yêu cầu REST với chữ ký HMAC SHA256. Những chữ ký đó sau đó cần phải được chuyển đổi thành base64. & NBSP; Amazon S3 sử dụng chuỗi Base64 cho băm của họ. & NBSP; Có một số lý do chính đáng để sử dụng mã hóa Base64. Xem & nbsp; Câu hỏi StackOverflow Việc sử dụng mã hóa cơ sở 64 là gì?
Dưới đây là một số giải pháp HMAC SHA 256 đơn giản hóa. Tất cả chúng nên đầu ra
P-WgZ8CqV51aI-3TncZj5CpSZh98PjZTYxrvxkmQYmI=
0 với các giá trị của P-WgZ8CqV51aI-3TncZj5CpSZh98PjZTYxrvxkmQYmI=
1 và P-WgZ8CqV51aI-3TncZj5CpSZh98PjZTYxrvxkmQYmI=
2. Hãy chú ý đến thủ đô M. Thông điệp băm là trường hợp nhạy cảm.Nhảy đến một triển khai:
- JavaScript
- PHP
- Java
- Groovy
- C#
- Mục tiêu c
- Đi
- Ruby
- Python2
- Python3
- Perl
- Phi tiêu
- Nhanh
- Rỉ sét
- Hãy nhìn vào kho lưu trữ ALCO/Rust-Digest để biết Rust [Lang]. Tôi chưa xác minh.
- PowerShell [Windows] HMAC SHA256
- Chủ yếu là gói thư viện .NET nhưng hữu ích khi thấy nó trong cú pháp phù hợp của PowerShell. Xem mã là ý chính
Shell [bash, v.v.] HMAC SHA256
Sử dụng OpenSSL. Tín dụng cho @CCHECHJIRI
var hash = CryptoJS.HmacSHA256["Message", "secret"];
var hashInBase64 = CryptoJS.enc.Base64.stringify[hash];
document.write[hashInBase64];
### Delphi HMAC SHA256
Làm cách nào để giải mã HMAC SHA256?
$s = hash_hmac['sha256', 'Message', 'secret', true];
echo base64_encode[$s];
Đầu tiên, nhập văn bản đơn giản và khóa mật mã để tạo mã. Sau đó, bạn có thể sử dụng Chức năng Chọn hàm băm bạn muốn đăng ký băm. Mặc định là SHA-256. Sau đó, bạn có thể gửi yêu cầu của mình bằng cách nhấp vào nút băm tính để tạo mã xác thực HMAC cho bạn.
HMAC SHA256 là gì?
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
public class ApiSecurityExample {
public static void main[String[] args] {
try {
String secret = "secret";
String message = "Message";
Mac sha256_HMAC = Mac.getInstance["HmacSHA256"];
SecretKeySpec secret_key = new SecretKeySpec[secret.getBytes[], "HmacSHA256"];
sha256_HMAC.init[secret_key];
String hash = Base64.encodeBase64String[sha256_HMAC.doFinal[message.getBytes[]]];
System.out.println[hash];
}
catch [Exception e]{
System.out.println["Error"];
}
}
}
HMACSHA256 là một loại thuật toán băm khóa được xây dựng từ hàm băm SHA-256 và được sử dụng làm mã xác thực tin nhắn dựa trên băm [HMAC].
Sha256 base64 là gì?
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.security.InvalidKeyException;
def hmac_sha256[String secretKey, String data] {
try {
Mac mac = Mac.getInstance["HmacSHA256"]
SecretKeySpec secretKeySpec = new SecretKeySpec[secretKey.getBytes[], "HmacSHA256"]
mac.init[secretKeySpec]
byte[] digest = mac.doFinal[data.getBytes[]]
return digest
} catch [InvalidKeyException e] {
throw new RuntimeException["Invalid key exception while converting to HMac SHA256"]
}
}
def hash = hmac_sha256["secret", "Message"]
encodedData = hash.encodeBase64[].toString[]
log.info[encodedData]
C# HMAC SHA256
LRH9CAkNs-zoU3hxHbrtY0CUUcmqzibPeN7x6-vwNWQ=
0Khách quan C và ca cao HMAC SHA256
Hầu hết các mã cần thiết là để chuyển đổi thành BAE64 và làm việc các loại dữ liệu NSString và NSDATA.
LRH9CAkNs-zoU3hxHbrtY0CUUcmqzibPeN7x6-vwNWQ=
1Ngôn ngữ lập trình GO - Golang HMAC SHA256
- Hãy thử trực tuyến trong trình duyệt của bạn với Play Golang
- Gói tiền điện tử/HMAC
LRH9CAkNs-zoU3hxHbrtY0CUUcmqzibPeN7x6-vwNWQ=
2Ruby HMAC SHA256
Yêu cầu OpenSSL và Base64.
LRH9CAkNs-zoU3hxHbrtY0CUUcmqzibPeN7x6-vwNWQ=
3Python [2.7] HMAC SHA256
LRH9CAkNs-zoU3hxHbrtY0CUUcmqzibPeN7x6-vwNWQ=
4Được thử nghiệm với Python 2.7.6. Ngoài ra, hãy chắc chắn không đặt tên cho tập lệnh demo Python của bạn giống như một trong các thư viện đã nhập.
Python [3.7] HMAC SHA256
LRH9CAkNs-zoU3hxHbrtY0CUUcmqzibPeN7x6-vwNWQ=
5Được thử nghiệm với Python 3.7.0. Ngoài ra, hãy chắc chắn không đặt tên cho tập lệnh demo Python của bạn giống như một trong các thư viện đã nhập. Cảm ơn @biswapanda.
Perl HMAC SHA256
Xem Digest :: Tài liệu SHA. Theo quy ước, các mô -đun tiêu hóa không đệm đầu ra base64 của họ. Để khắc phục điều này, bạn có thể kiểm tra độ dài của băm và nối các dấu hiệu bằng nhau "=" cho đến khi chiều dài là bội số của 4. Chúng tôi sẽ sử dụng hàm mô đun bên dưới.
LRH9CAkNs-zoU3hxHbrtY0CUUcmqzibPeN7x6-vwNWQ=
6DART HMAC SHA256
Phụ thuộc vào gói tiền điện tử phi tiêu.
LRH9CAkNs-zoU3hxHbrtY0CUUcmqzibPeN7x6-vwNWQ=
7Swift HMAC SHA256
Tôi chưa xác minh nhưng thấy bài đăng này
Rỉ sét
Hãy nhìn vào kho lưu trữ ALCO/Rust-Digest để biết Rust [Lang]. Tôi chưa xác minh.
PowerShell [Windows] HMAC SHA256
Chủ yếu là gói thư viện .NET nhưng hữu ích khi thấy nó trong cú pháp phù hợp của PowerShell. Xem mã là ý chính
LRH9CAkNs-zoU3hxHbrtY0CUUcmqzibPeN7x6-vwNWQ=
8Shell [bash, v.v.] HMAC SHA256
Sử dụng OpenSSL. Tín dụng cho @CCHECHJIRI
LRH9CAkNs-zoU3hxHbrtY0CUUcmqzibPeN7x6-vwNWQ=
9### Delphi HMAC SHA256
//stackoverflow.com/a/40182566/215502