HMAC-SHA1 को C#में कैसे जनरेट करें?




java php (2)

इस साइट के भाषाओं में कुछ बहुत अच्छे उदाहरण हैं: http://jokecamp.wordpress.com/2012/10/21/examples-of-creating-base64-hashes-using-hmac-sha256-in-different-languages/

लेखन के समय ग # कार्यान्वयन है:

private string CreateToken(string message, string secret)
{
 secret = secret ?? "";
 var encoding = new System.Text.ASCIIEncoding();
 byte[] keyByte = encoding.GetBytes(secret);
 byte[] messageBytes = encoding.GetBytes(message);
 using (var hmacsha256 = new HMACSHA256(keyByte))
 {
 byte[] hashmessage = hmacsha256.ComputeHash(messageBytes);
 return Convert.ToBase64String(hashmessage);
 }
}

मैं C # का उपयोग करके REST API का उपयोग करने का प्रयास कर रहा हूं। एपीआई निर्माता ने पीएचपी, रूबी और जावा में नमूना पुस्तकालय प्रदान किए हैं। मैं इसके एक हिस्से पर लटका हुआ हूं, जहां मुझे HMAC उत्पन्न करने की आवश्यकता है।

यहां बताया गया है कि यह उनके द्वारा प्रदान किए गए नमूना पुस्तकालयों में कैसे किया जाता है।

पीएचपी

hash_hmac('sha1', $signatureString, $secretKey, false);

माणिक

digest = OpenSSL::Digest::Digest.new('sha1')
return OpenSSL::HMAC.hexdigest(digest, secretKey, signatureString)

जावा

SecretKeySpec signingKey = new SecretKeySpec(secretKey.getBytes(), HMAC_SHA1_ALGORITHM);

Mac mac = null;
mac = Mac.getInstance(HMAC_SHA1_ALGORITHM);
mac.init(signingKey);

byte[] bytes = mac.doFinal(signatureString.getBytes());

String form = "";
for (int i = 0; i < bytes.length; i++)
{
    String str = Integer.toHexString(((int)bytes[i]) & 0xff);
    if (str.length() == 1)
    {
        str = "0" + str;
    }

    form = form + str;
}
return form;

यहाँ C # में मेरा प्रयास है। यह काम नहीं कर रहा है। अद्यतन: नीचे सी # उदाहरण ठीक काम करता है। मुझे पता चला कि असली समस्या मेरे signatureString -पत्र में न्यूलाइन वर्णों में कुछ क्रॉस-प्लेटफ़ॉर्म अंतर के कारण थी।

var enc = Encoding.ASCII;
HMACSHA1 hmac = new HMACSHA1(enc.GetBytes(secretKey));
hmac.Initialize();

byte[] buffer = enc.GetBytes(signatureString);
return BitConverter.ToString(hmac.ComputeHash(buffer)).Replace("-", "").ToLower();

इसे इस्तेमाल करे:

http://msdn.microsoft.com/en-us/library/system.security.cryptography.hmacsha1.aspx

त्वरित और गंदा कोड:

public string Encode(string input, byte [] key)
{
        HMACSHA1 myhmacsha1 = new HMACSHA1(key);
        byte[] byteArray = Encoding.ASCII.GetBytes( input );
        MemoryStream stream = new MemoryStream( byteArray ); 
        byte[] hashValue = myhmacsha1.ComputeHash(stream);
        return hashValue.ToString();
}




hmac