首页  ·  知识 ·  移动开发
WindowsPhone应用程序中加密解密数据
网友    Wphone  编辑:dezai   图片来源:网络
在程序中加密解密是我们常要用到的功能,比如对密码,数据库连接字符串,PIN等的加密。虽然Windows Phone限制了应用程序仅能访问自己的独立存储,但是将重要数据
在程序中加密解密是我们常要用到的功能,比如对密码,数据库连接字符串,PIN等的加密。虽然Windows Phone限制了应用程序仅能访问自己的独立存储,但是将重要数据以明文的形式存储在Isolated Storage依然是不安全的。在Windows Phone中加密解密通过Data Protection API (DPAPI)来实现。如果对加密解密有所了解的朋友会清楚,非对称的加密我们需要用到密钥对,而这往往需要我们自己生成,同时密钥本身需要存储,或者通过第三方机构颁布证书等的方式来验证信息的可靠性。而Windows Phone为我们简化了这个难题,每一个程序在第一次运行的时候就可以获得它自己的解密密钥。而我们只需要借助ProtectedData类的Protect  Unprotect方法分别实现加密和解密。对于数据类型的文件,直接可以对数据库加密,在连接字符串中使用Password参数即可。当然连接字符串本身也需要进行加密和解密,以防止密码泄露
接下来我将演示如何在Windows Phone 应用程序中运用这两个方法。本文请参考MSDN文档 http://msdn.microsoft.com/zh-cn/library/hh487164(v=VS.92).aspx



创建项目                                   

1.   创建Windows Phone 7项目EncryptionAndDecryptionWP

2.   添加TextBox控件txtData

3.   添加btnStore按钮,用于加密数据,将加密结果保存在内存中

4.   添加btnRetrieve按钮,用于解密数据,并将解密结果用弹出对话框显示。





ContentPanel部分的XAML如下:
 
<Grid x:Name="LayoutRoot" Background="Transparent">



        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,150,12,0">



            <StackPanel Orientation="Vertical">



                <TextBox x:Name="txtData" Height="80" Width="460" Foreground="{StaticResource PhoneAccentBrush}" FontSize="{StaticResource PhoneFontSizeLarge}" />



                <Button x:Name="btnStore" Content="Store" Height="71" Width="160" BorderBrush="{StaticResource PhoneAccentBrush}" Foreground="{StaticResource PhoneAccentBrush}" Click="btnStore_Click" />



                <Button x:Name="btnRetrieve" Content="Retrieve" Height="71" Width="160" BorderBrush="{StaticResource PhoneAccentBrush}" Foreground="{StaticResource PhoneAccentBrush}" Click="btnRetrieve_Click" />



            </StackPanel>



        </Grid>



    </Grid>
 
 
 

加密数据                                   



当单击btnStore后,加密txtData中的数据,并保存在变量中,代码如下:



private byte[] _encryptedBytes;







private void btnStore_Click(object sender, RoutedEventArgs e)



{



      var sourceBytes = Encoding.UTF8.GetBytes(txtData.Text.Trim());



      _encryptedBytes = ProtectedData.Protect(sourceBytes, null); 



}

 

解密数据                                      

当单击btnRetrieve后,解密数据,代码如下:

 private void btnRetrieve_Click(object sender, RoutedEventArgs e)



 {



      if (_encryptedBytes == nullreturn;



      var bytes = ProtectedData.Unprotect(_encryptedBytes, null);



      if (bytes != null) MessageBox.Show(Encoding.UTF8.GetString(bytes, 0, bytes.Length)); 



  }

 



运行结果:输入admin

 

本文作者:网友 来源:网络
CIO之家 www.ciozj.com 微信公众号:imciow
   
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读