2016-09-06 22 views
1

Encrypt.cs如何將字符串轉換爲UWP中的image.source?

BitmapImage bitmapImage = new BitmapImage(new Uri(this.BaseUri,@"D:\Others\Quotes\1.jpg")); 
var plainString = bitmapImage; 
string key = txtkey.Text; // Key 
string encryptedString = await EncryptStringHelper(plainString.ToString(), key); // Encrypt method and get string 
txbencrypt.Text = encryptedString; 

Decrypt.cs

string encryptedString = txbencrypt.Text; // Encrypt text 
string key = txtkey.Text; // Same key 
string decryptedString = await DecryptStringHelper(encryptedString, key); 
imgoutput.Source = decryptedString; 


    private Task<string> EncryptStringHelper(string plainString, string key) 
    { 
     try 
     { 
      var hashKey = GetMD5Hash(key); 
      var decryptBuffer = CryptographicBuffer.ConvertStringToBinary(plainString, BinaryStringEncoding.Utf8); 
      var AES = SymmetricKeyAlgorithmProvider.OpenAlgorithm(SymmetricAlgorithmNames.AesEcbPkcs7); 
      var symmetricKey = AES.CreateSymmetricKey((IBuffer)hashKey); 
      var encryptedBuffer = CryptographicEngine.Encrypt(symmetricKey, decryptBuffer, null); 
      var encryptedString = CryptographicBuffer.EncodeToBase64String(encryptedBuffer); 
      return Task.Run(() => 
      { 
       return encryptedString; 
      }); 
     } 
     catch (Exception ex) 
     { 
      return null; 
     } 
    } 

    public Task<string> DecryptStringHelper(string encryptedString, string key) 
    { 
     try 
     { 
      var hashKey = GetMD5Hash(key); 
      IBuffer decryptBuffer = CryptographicBuffer.DecodeFromBase64String(encryptedString); 
      var AES = SymmetricKeyAlgorithmProvider.OpenAlgorithm(SymmetricAlgorithmNames.AesEcbPkcs7); 
      var symmetricKey = AES.CreateSymmetricKey((IBuffer)hashKey); 
      var decryptedBuffer = CryptographicEngine.Decrypt(symmetricKey, decryptBuffer, null); 
      string decryptedString = CryptographicBuffer.ConvertBinaryToString(BinaryStringEncoding.Utf8, decryptedBuffer); 
      return Task.Run(() => 
      { 
       return decryptedString; 
      }); 
     } 
     catch (Exception ex) 
     { 
      return null; 
     } 
    } 

我開發通用的Windows應用程序(UWP),然後嘗試進行加密和解密,以圖像文件,但我轉換圖片來加密文本,然後我不能」當我將該文本解密爲圖像時,將其轉換。那我該怎麼做?

+0

你的字符串是'base64'字符串嗎? –

+0

是的,例如:(FXr1sQhcoFsg3fRqyTovZrUw4g0nWrJtPAuk9iQgqXjWw33IXYUyEINuJViIDUGl)這是加密字符串,但我解密文本它的返回時,我把斷點在字符串decryptedstring變量它顯示在「windows.ui.xaml.media.imaging.bitmapimage」,所以我如何轉換圖像。 – Azarudeen

+0

據我瞭解,'decryptedString' - base64string,並且你想從'decryptedString'創建圖像 –

回答

1

你會想要將base 64字符串轉換爲字節數組,然後從中創建ImageSource。

byte[] data = Convert.FromBase64String(base64string); 
if (data.caseImage.Count() > 1) 
     { 
      MemoryStream ms = new MemoryStream(data.caseImage, 0, data.caseImage.Length); 
      BitmapImage img = new BitmapImage(); 
      var ras = ms.AsRandomAccessStream(); 
      await img.SetSourceAsync(ras); 
      imgCase.Source = img; 
     } 

與imgCase是一個Xaml圖像。

而言

最初創建base64string,你會想要做這樣的事情:

轉換的BitmapImage到的ImageSource:

   BitmapImage bitmapCamera = new BitmapImage(); 
       bitmapCamera.SetSource(streamCamera); 
       // Convert the camera bitap to a WriteableBitmap object, 
       // which is often a more useful format. 

       int width = bitmapCamera.PixelWidth; 
       int height = bitmapCamera.PixelHeight; 

       WriteableBitmap wBitmap = new WriteableBitmap(width, height); 

       using (var stream = await capturedMedia.OpenAsync(FileAccessMode.Read)) 
       { 
        wBitmap.SetSource(stream); 
       } 

       imgPreview.Source = wBitmap; 

而且還是StorageFile到Base64String:

 byte[] fileBytes = null; 
    var imageFile = *Your storageFile*; 

        mimetype = imageFile.ContentType; 
        filetype = imageFile.FileType; 
        using (IRandomAccessStreamWithContentType stream = await imageFile.OpenReadAsync()) 
        { 
         fileBytes = new byte[stream.Size]; 
         using (DataReader reader = new DataReader(stream)) 
         { 
          await reader.LoadAsync((uint)stream.Size); 
          reader.ReadBytes(fileBytes); 
         } 
        } 
       string base64 = Convert.ToBase64String(fileBytes); 

希望這可以幫助。