मैं HMAC-SHA1 का उपयोग कर कुछ मान hashing रहा हूँ, जावा में निम्नलिखित कोड का उपयोग कर:एचएमएसी-एसएचए 1: जावा में इसे ठीक से कैसे करें?
public static String hmacSha1(String value, String key) {
try {
// Get an hmac_sha1 key from the raw key bytes
byte[] keyBytes = key.getBytes();
SecretKeySpec signingKey = new SecretKeySpec(keyBytes, "HmacSHA1");
// Get an hmac_sha1 Mac instance and initialize with the signing key
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(signingKey);
// Compute the hmac on input data bytes
byte[] rawHmac = mac.doFinal(value.getBytes());
// Convert raw bytes to Hex
byte[] hexBytes = new Hex().encode(rawHmac);
// Covert array of Hex bytes to a String
return new String(hexBytes, "UTF-8");
} catch (Exception e) {
throw new RuntimeException(e);
}
}
Hex()
अंतर्गत आता है org.apache.commons.codec
लिए PHP में एक समान कार्य hash_hmac(algorithm, data, key)
कि मैं मूल्यों लौटे तुलना करने के लिए उपयोग करते हैं वहाँ मेरे जावा कार्यान्वयन द्वारा।
तो पहली कोशिश है:
hash_hmac("sha1", "helloworld", "mykey") // PHP
कि रिटर्न: 74ae5a4a3d9996d5918defc2c3d475471bbf59ac
मेरे जावा फ़ंक्शन 74ae5a4a3d9996d5918defc2c3d475471bbf59ac
रूप में अच्छी तरह।
ठीक है, ऐसा लगता है।
hash_hmac("sha1", "helloworld", "PRIE7$oG2uS-Yf17kEnUEpi5hvW/#AFo") // PHP
कि रिटर्न: e98bcc5c5be6f11dc582ae55f520d1ec4ae29f7a
जबकि इस बार मेरी जावा impl रिटर्न: तो फिर मैं एक अधिक जटिल कुंजी का उपयोग करने की कोशिश c19fccf57c613f1868dd22d586f9571cf6412cd0
हैश मेरी PHP कोड द्वारा लौटाए के बराबर नहीं है मेरे जावा फ़ंक्शन द्वारा मूल्य लौटाया गया, और मुझे पता नहीं चला कि क्यों।
कोई सुझाव?
का उपयोग कर प्रवेश करने का प्रयास PHP में चर के रूप में $ chars की व्याख्या नहीं करेगा? –
आपको हेक्स चरण की आवश्यकता क्यों है? –