This site uses cookies to deliver our services. By using this site, you acknowledge that you have read and understand our Cookie and Privacy policy. Your use of Kontext website is subject to this policy. Allow Cookies and Dismiss

在Windows Phone应用程序中加密解密数据

449 views 0 comments last modified about 7 years ago Raymond Tang Fahao

C# Windows Phone

在程序中加密解密是我们常要用到的功能,比如对密码,数据库连接字符串,PIN等的加密。虽然Windows Phone限制了应用程序仅能访问自己的独立存储,但是将重要数据以明文的形式存储在Isolated Storage依然是不安全的。在Windows Phone中加密解密通过Data Protection API (DPAPI)来实现。如果对加密解密有所了解的朋友会清楚,非对称的加密我们需要用到密钥对,而这往往需要我们自己生成,同时密钥本身需要存储,或者通过第三方机构颁布证书等的方式来验证信息的可靠性。而Windows Phone为我们简化了这个难题,每一个程序在第一次运行的时候就可以获得它自己的解密密钥。而我们只需要借助ProtectedData类的ProtectUnprotect方法分别实现加密和解密。对于数据类型的文件,直接可以对数据库加密,在连接字符串中使用Password参数即可。当然连接字符串本身也需要进行加密和解密,以防止密码泄露。

接下来我将演示如何在Windows Phone 应用程序中运用这两个方法。本文请参考MSDN文档http://msdn.microsoft.com/en-us/library/hh487164(v=VS.92).aspx

创建项目

  1. 创建Windows Phone 7项目EncryptionAndDecryption
  2. 添加TextBox控件textBoxData
  3. 添加buttonStore按钮,用于加密数据,将加密结果保存在内存中
  4. 添加buttonRetrieve按钮,用于解密数据,并将解密结果用弹出对话框显示。

最终ContentPanel部分的XAML如下:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            <StackPanel Orientation="Vertical">
                <TextBox Height="71" Name="textBoxData" Text="" Width="460" Foreground="{StaticResource PhoneAccentBrush}" FontSize="{StaticResource PhoneFontSizeLarge}" />
                <Button Content="Store" Height="71" Name="buttonStore" Width="160" BorderBrush="{StaticResource PhoneAccentBrush}" Foreground="{StaticResource PhoneAccentBrush}" Click="ButtonStoreClick" />
                <Button Content="Retrieve" Height="71" Name="buttonRetrieve" Width="160" BorderBrush="{StaticResource PhoneAccentBrush}" Foreground="{StaticResource PhoneAccentBrush}" Click="ButtonRetrieveClick" />
            </StackPanel>
        </Grid>
    </Grid>

加密数据

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

private byte[] _encryptedBytes;

        private void ButtonStoreClick(object sender, RoutedEventArgs e)
        {
            var sourceBytes = Encoding.UTF8.GetBytes(textBoxData.Text.Trim());
            _encryptedBytes = ProtectedData.Protect(sourceBytes, null);
        }

解密数据

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

private void ButtonRetrieveClick(object sender, RoutedEventArgs e)
       {
           if (_encryptedBytes == null) return;
           var bytes = ProtectedData.Unprotect(_encryptedBytes, null);
           if (bytes != null) MessageBox.Show(Encoding.UTF8.GetString(bytes, 0, bytes.Length));
       }

运行结果

输入Hello Windows Phone!

Encryption and Decryption in Windows Phone Application - 1Encryption and Decryption in Windows Phone Application -2

运行结果达到预期。

其它说明

通常情况下,我们需要将加密后的数据保存在独立存储中;Protect与Unprotect的第二个参数是信息熵,可以增加加密的复杂度,可以均为null,同时必须保持一致。

Related pages

Surface RT/Pro 版本Windows 8 QQ下载与安装

2713 views   0 comments last modified about 5 years ago

Surface的用户可能会遇到一个难题,在应用商城里边无法搜索到QQ应用程序。但是让我疑惑的是,我的Windows 8.1 系统之前是成功安装了QQ。

后来在腾讯QQ下载官网发现,其实是有QQ应用安装的链接:

按照如下方法安装Surface QQ.

Have fun!

image

View detail

my first begining with Windows 7

147 views   0 comments last modified about 10 years ago

Maybe it is a little late now due to busy work,anyhow,it is better to do lately than never to do.

View detail

[教程]在Windows Phone 程序中使用LINQ to XML以及执行数据绑定

307 views   0 comments last modified about 8 years ago


LINQ是Language Integrated Query的简写,中文名称是语言集成查询,它是一组技术的组合,包括LINQ to DataSet(typed 以及untyped),LINQ to SQL(适用于SQL Server数据库),LINQ to XML(包括内存中以及XML文件中的数据),LINQ to Object,LINQ to Entities(结合Entity Framework使用)等。这些技术建立在将查询功能直接集成到 C# 语言(以及 Visual Basic 和可能的任何其他 .NET 语言)的基础上。借助于 LINQ,查询现在已是高级语言构造,就如同类、方法、事件等等。具体参考MSDN文档介绍View detail

SVN 中文子目录权限失效的解决方案

353 views   0 comments last modified about 9 years ago

svn对于非英文文件名和目录名使用utf-8格式编码处理,要对中文目录进行正确控制,
对于authz文件应该使用无BOM的utf-8格式,如何将默认的文件转为utf-8?可以使用UltraEdit编辑器存储的时候把格式选择“UTF-8 无BOM”;

View detail

LINQ to SQL in Windows Phone 7 Error: An overflow occurred while converting to datetime.

499 views   0 comments last modified about 7 years ago

Resolve the issue in Linq to SQL in Windows Phone 7 App:
An overflow occurred while converting to datetime.

View detail

Add comment

Please login first to add comments.  Log in New user?  Register

Comments (0)

No comments yet.