में HmacSHA256 हस्ताक्षर उत्पन्न करना मैं अपने संदेश को अमेज़ॅन एडब्ल्यूएस (जुनीट टेस्ट के अंदर) पर हस्ताक्षर करने की कोशिश कर रहा हूं, लेकिन मुझे एक समस्या आई। यहाँ कोड मैं का उपयोग कर रहा है:जुनीट
String secretAccessKey = "secret1234678901";
SecretKeySpec keySpec = new SecretKeySpec(secretAccessKey.getBytes(UTF-8), "HmacSHA256");
Mac mac = Mac.getInstance(this.MAC_ALGO);
mac.init(keySpec); // here it breaks
byte[] encoded = mac.doFinal(
request.toString().getBytes(this.CHARSET));
return Base64.encodeBase64URLSafeString(encoded);
लाइन में चिह्नित (mac.init(...)
) जावा फेंकता अपवाद:
java.lang.ClassCastException: com.sun.crypto.provider.HmacSHA1 cannot be cast to javax.crypto.MacSpi
at javax.crypto.Mac.a(DashoA13*..)
at javax.crypto.Mac.init(DashoA13*..)
क्या आप जानते हैं कि ऐसा क्यों होता है? नेट कोड पर मैंने जो भी कोड देखा है, वह लगभग इसी तरह दिखता है, मैंने उसी परिणाम के साथ एचएमएसीएसए 1 के साथ भी कोशिश की।
यह अपवाद बताता है कि आपकी जावा कॉन्फ़िगरेशन बहुत गलत है। क्या आप शायद जावा क्लासपाथ में jce.jar के अपने संस्करण में मिश्रण कर रहे हैं? आधुनिक जावा में पहले से ही सभी क्रिप्टो पुस्तकालयों का निर्माण किया गया है। –
बस एक नोट: आपके द्वारा पोस्ट किया गया कोड संकलित नहीं होता है, और यदि आप इसे संकलित करने के लिए परिवर्तन करते हैं, तो यह कभी भी यह त्रुटि संदेश नहीं देगा (आप "HmacSHA256" निर्दिष्ट करते हैं, लेकिन त्रुटि संदेश "HmacSHA1" कहता है)। मुझे लगता है कि एक विन्यास त्रुटि, जैसे ग्रेग ने कहा, हालांकि। –