java एचएमएसी-एसएचए 1: जावा में इसे ठीक से कैसे करें?




hash sha1 (4)

जावा में , और मेवेन का उपयोग करना:

नीचे निर्भरता को pom.xml में जोड़ें:

 <!-- https://mvnrepository.com/artifact/commons-codec/commons-codec -->
    <dependency>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
        <version>1.4</version>
    </dependency>

और उसके बाद इसका उपयोग करने के लिए साइन इन करने का प्रयास करें

HmacUtils.hmacSha1Hex(key, string_to_sign);

जावा में निम्न कोड का उपयोग करके, मैं एचएमएसी-एसएचए 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

जबकि इस बार मेरा जावा c19fccf57c613f1868dd22d586f9571cf6412cd0 रिटर्न: c19fccf57c613f1868dd22d586f9571cf6412cd0

मेरे PHP कोड द्वारा वापस किया गया हैश मेरे जावा फ़ंक्शन द्वारा दिए गए मान के बराबर नहीं है, और मुझे पता नहीं चल रहा है कि क्यों।

कोई सुझाव?


डबल कोट्स ("") में किसी भी $ प्रतीक को PHP में aa variable के रूप में माना जाता है। आप पिछली टिप्पणीकर्ता द्वारा बताए गए एकल उद्धरणों का उपयोग करके त्रुटि से बच सकते हैं या आप नीचे दिए गए डॉलर के चिह्न से बच सकते हैं

hash_hmac("sha1", "helloworld", "PRIE7\$oG2uS-Yf17kEnUEpi5hvW/#AFo")

नोटिस $ अब $ $ है



अपने PHP पक्ष पर, कुंजी के चारों ओर सिंगल-कोट्स का उपयोग करें ताकि $ वर्ण को एक चर संदर्भ के रूप में नहीं माना जा सके। अर्थात,

hash_hmac("sha1", "helloworld", 'PRIE7$oG2uS-Yf17kEnUEpi5hvW/#AFo')

अन्यथा, आपको जो कुंजी मिलती है PRIE7-Yf17kEnUEpi5hvW/#AFo है PRIE7-Yf17kEnUEpi5hvW/#AFo (मानते हैं कि परिवर्तनीय $oG2uS परिभाषित नहीं है)।





hmac