2012-11-08 25 views
8

Tôi đang di chuyển/chuyển đổi/xây dựng lại ứng dụng Windows Phone 7.1 thành Windows 8 Store App.Làm việc với hmacsha256 trong cửa sổ ứng dụng cửa hàng

Một phương pháp Tôi đang sử dụng trong ứng dụng WP7 de ban cho tôi rắc rối:

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; 
} 

Nhìn vào tài liệu cho Windows Store Apps tôi đã đưa ra mã mới này mà tôi hy vọng sẽ cung cấp cho cùng một kết quả. Nhưng không. Tôi đang làm gì đó sai. Nhưng cái gì?

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; 
} 

Tôi không phải là chuyên gia về Mật mã. Tôi không chắc mình đang làm gì. Có lẽ có ai đó ngoài kia có thể giúp tôi.

Thanx, JP

+0

"Một phương pháp tôi đang sử dụng trong ứng dụng de WP7 là khiến tôi gặp sự cố" tại sao? Phương pháp/lớp học bị thiếu? Ngoại lệ? Chi tiết sẽ giúp bạn. – Will

Trả lời

1

HMACSHA256 mới (keydata) sử dụng một chìa khóa như là đầu vào, trong khi MacAlgorithmProvider.CreateKey() sử dụng đầu vào là 'dữ liệu ngẫu nhiên sử dụng để giúp tạo ra chìa khóa', mà không phải là một chìa khóa cho HMAC thuật toán.

+0

Xin lỗi Nickolay, tôi không hiểu. Như tôi đã nói, tôi không có chuyên gia về những thứ Crypto. Bạn có ý nghĩa gì với HMACSHA256 (keydata) mới? –

+1

Tôi có nghĩa là hàm tạo cho lớp HMACSHA256 sử dụng keydata làm khóa, trong khi MacAlgorithmProvider.CreateKey - làm đầu vào cho trình tạo khóa. –

+1

Tôi không thể sử dụng HMACSHA256 (secretKeyBytes) mới nữa. Nó không được hỗ trợ trong một ứng dụng cửa sổ cửa sổ. Vì vậy, tôi phải tìm ra cách khác. –

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

Vui lòng thêm một số ngữ cảnh để giải thích tại sao mã của bạn trả lời câu hỏi của OP. – mdewitt

+0

Cảm ơn điều đó, gần như chính xác những gì tôi đang tìm kiếm. –

Các vấn đề liên quan