2012-11-08 12 views
8

मैं विंडोज 8 स्टोर ऐप में विंडोज फोन 7.1 ऐप माइग्रेट/कनवर्ट/पुनर्निर्माण कर रहा हूं।विंडोज स्टोर ऐप में hmacsha256 के साथ काम करना

private byte[] GetSHA256Key(string data, string secretKey) 
{ 
    byte[] value = Encoding.UTF8.GetBytes(data); 
    byte[] secretKeyBytes = Encoding.UTF8.GetBytes(secretKey); 

    HMACSHA256 hmacsha256 = new HMACSHA256(secretKeyBytes); 

    byte[] resultBytes = hmacsha256.ComputeHash(value); 

    return resultBytes; 
} 

Windows स्टोर ऐप्स के लिए प्रलेखन मैं इस नए कोड जो मैं आशा व्यक्त की एक ही परिणाम देना होगा के साथ आया को देखते हुए:

एक विधि मैं डी WP7 के अनुप्रयोग में उपयोग कर रहा हूँ मुझे परेशानी दे रहा है। लेकिन नहीं। मैं कुछ गलत कर रहा हूँ। पर क्या?

private byte[] GetSHA256Key(string value, string secretKey) 
{ 
     // Create a MacAlgorithmProvider object for the specified algorithm. 
     MacAlgorithmProvider objMacProv = MacAlgorithmProvider.OpenAlgorithm(MacAlgorithmNames.HmacSha256); 

     // Create a buffer that contains the message to be signed. 
     IBuffer valueBuffer = CryptographicBuffer.ConvertStringToBinary(value, BinaryStringEncoding.Utf8); 

     // Create a key to be signed with the message. 
     IBuffer buffKeyMaterial = CryptographicBuffer.ConvertStringToBinary(secretKey, BinaryStringEncoding.Utf8); 
     CryptographicKey cryptographicKey = objMacProv.CreateKey(buffKeyMaterial); 

     // Sign the key and message together. 
     IBuffer bufferProtected = CryptographicEngine.Sign(cryptographicKey, valueBuffer); 

     DataReader dataReader = DataReader.FromBuffer(bufferProtected); 
     byte[] bytes = new byte[bufferProtected.Length]; 
     dataReader.ReadBytes(bytes); 

     return bytes; 
} 

मैं क्रिप्टोग्राफी पर एक विशेषज्ञ नहीं हूं। मुझे यकीन नहीं है कि मैं क्या कर रहा हूं। शायद वहां कोई है जो मेरी मदद कर सकता है।

Thanx, जेपी

+0

"एक विधि जो मैं WP7 ऐप में उपयोग कर रहा हूं मुझे परेशानी दे रही है" क्यों? तरीके/कक्षाएं गायब हैं? अपवाद? विवरण आपकी मदद करेगा। – Will

उत्तर

1

नई HMACSHA256 (keydata) इनपुट के रूप में एक कुंजी का उपयोग करता है, जबकि MacAlgorithmProvider.CreateKey() के रूप में है, जो HMAC के लिए एक महत्वपूर्ण नहीं है 'कुंजी उत्पन्न करने में मदद करने के लिए इस्तेमाल यादृच्छिक डेटा के इनपुट का उपयोग करता है कलन विधि।

+0

क्षमा करें निकोले, मुझे समझ में नहीं आता है। जैसा कि मैंने कहा, मैं क्रिप्टो चीजों में कोई विशेषज्ञ नहीं हूं। नए HMACSHA256 (कीडेटा) के साथ आपका क्या मतलब है? –

+1

मेरा मतलब था कि HMACSHA256 क्लास के लिए कन्स्ट्रक्टर कुंजीडेटा को कुंजी के रूप में उपयोग करता है, जबकि मैक एल्गोरिथ्मप्रोवाइडर। क्रेतेके - कुंजी जनरेटर के इनपुट के रूप में। –

+1

मैं अब नए HMACSHA256 (secretKeyBytes) का उपयोग नहीं कर सकता। यह विंडोज स्टोर ऐप में समर्थित नहीं है। तो मुझे एक और तरीका पता लगाना है। –

7
using System.Runtime.InteropServices.WindowsRuntime; 

private string GetSHA256Key(byte[] secretKey, string value) 
{ 
    var objMacProv = MacAlgorithmProvider.OpenAlgorithm(MacAlgorithmNames.HmacSha256); 
    var hash = objMacProv.CreateHash(secretKey.AsBuffer()); 
    hash.Append(CryptographicBuffer.ConvertStringToBinary(value, BinaryStringEncoding.Utf8)); 
    return CryptographicBuffer.EncodeToBase64String(hash.GetValueAndReset()); 
} 
+2

कृपया यह बताने के लिए कुछ संदर्भ जोड़ें कि आपका कोड ओपी के प्रश्न का उत्तर क्यों देता है। – mdewitt

+0

इसके लिए धन्यवाद, लगभग वही है जो मैं खोज रहा था। –

संबंधित मुद्दे