Windows Phone 安全连接与数据加密指南
1. 建立 SSL 连接
当 Windows Phone 客户端尝试与远程服务器建立安全连接时,会先确定服务器证书的证书颁发机构(CA)。确定 CA 后,客户端会检查自身安装的 CA 列表。若列表中存在该 CA,表明设备与该 CA 已建立信任关系,进而可与远程服务器创建安全连接。
Windows Phone 设备预装了多个 CA,这意味着多数情况下,建立 SSL 连接会很顺畅。只要远程服务的证书由知名 CA(如 VeriSign)颁发,无论是通过手机上的 Internet Explorer 还是应用代码,都能创建 SSL 连接。
测试并打开 SSL 连接
以下是测试与远程服务器建立安全连接,以及编写 Windows Phone 应用程序以安全加载 PayPal 网站内容的步骤:
1.
测试连接
:
- 最快的测试方法是在 Windows Phone 模拟器或设备上打开 Internet Explorer,输入安全远程服务器的 URL。
- 点击“开始” -> “所有程序” -> “Windows Phone 开发工具” -> “Windows Phone 模拟器”启动模拟器。
- 模拟器加载完成后,点击 Internet Explorer 图标,输入
https://www.paypal.com
访问安全的 PayPal 网站。若能看到 PayPal 网站的主屏幕,则表示连接成功。
-
提示
:在模拟器中按键盘按钮可能较繁琐。模拟器加载后,按 PgUp 键可启用计算机键盘;按 PgDn 键可停止使用。
2.
创建应用程序
:
- 启动 Visual Studio 2010 Express for Windows Phone,创建一个名为 SSLConnection 的新 Windows Phone 应用程序项目。
- 从工具箱中将 WebBrowser 控件拖放到设计界面,并将其宽度和高度设置为 MainPage.xaml 可用设计界面的全宽和全高。
3.
添加代码
:
- 切换到代码视图(右键单击 MainPage.xaml 并选择“查看代码”),在 MainPage() 构造函数中添加以下代码:
string pageURL = "https://www.paypal.com";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(pageURL);
request.Method = "GET";
request.BeginGetResponse(HandleResponse, request);
- 编写回调函数 :
void HandleResponse(IAsyncResult result)
{
StreamReader reader = null;
HttpWebResponse httpResponse =
(HttpWebResponse)(((HttpWebRequest)result.AsyncState).EndGetResponse(result));
reader = new StreamReader(httpResponse.GetResponseStream(), Encoding.UTF8);
string pageResponse = reader.ReadToEnd();
Dispatcher.BeginInvoke(() => webBrowser1.NavigateToString(pageResponse));
}
- 运行应用程序 :按 F5 运行应用程序,应能在浏览器窗口中看到 PayPal 页面。
2. 创建自签名证书
若远程服务的所有用户都信任该服务的合法性,或者想在不花费大量资金购买证书的情况下测试安全服务,自签名 SSL 证书是个不错的选择。它能提供与使用 CA 证书相同的数据传输保护(数据通过 SSL 加密),只是在颁发和安装证书时会有一些管理开销。
在 Windows Phone 设备上使用自签名证书,需完成以下三个步骤:
1. 创建自签名证书。
2. 导出证书以便在移动设备上安装。
3. 在 Windows Phone 设备上安装证书。
以下假设使用 Windows 7 机器上的 IIS 7.5,且服务器和 Windows Phone 客户端(模拟器)在同一台机器上:
1. 点击“开始” -> “控制面板” -> “管理工具” -> “Internet Information Services (IIS) 管理器”打开 IIS 管理器。
2. 右键单击左侧的“站点”节点,选择“添加网站”,创建一个名为 WP7Server 的新网站,并填写网站属性。注意将端口设置为非默认的 80(如 8888),以免 IIS 报错。
3. 点击左侧的根机器节点,再点击“服务器证书”节点,在弹出的对话框中点击“创建自签名证书”链接,指定证书名称(如 wp7cert)。
4. 点击 WP7Server 网站,再点击右侧的“绑定”,点击“添加绑定”,选择 https 类型绑定,并从证书列表中选择 wp7cert 证书。
5. 打开记事本,粘贴以下 HTML 代码:
<html>
<h1>Hello, Windows Phone</h1>
</html>
- 将 HTML 文件保存到步骤 2 中指定的网站物理路径,并命名为 index.html。
-
在计算机上打开 Internet Explorer,导航到
https:/machinename/(machinename 为计算机名称),应能在浏览器中看到“Hello, Windows Phone”消息。 -
在 Windows Phone 模拟器上打开 Internet Explorer,导航到
https:/machinename/。首次启动模拟器时,点击“继续”后,即可从手机浏览器和应用程序与 Web 服务器建立 SSL 连接。
3. 导出自签名证书
若要使用自签名证书在客户端和服务器之间建立安全连接,需先从服务器导出证书。以下假设使用 Internet Explorer 9 导出证书:
1. 在服务器上打开 Internet Explorer,点击“工具” -> “Internet 选项”。若“工具”菜单不可见,按 Alt 键。
2. 在弹出的窗口中,点击“内容”选项卡,再点击“证书”按钮。在“证书”对话框中,选择“受信任的根证书颁发机构”选项卡,找到之前创建的自签名证书(如 wp7cert)。
3. 点击“导出”按钮,选择“否,不导出私钥”,点击“下一步”。
4. 选择 DER 编码的二进制 X.509 格式,点击“下一步”。选择导出证书的文件夹,将文件命名为 wp7cert.cer,点击“下一步”,再点击“完成”。导出成功后会收到相应消息。
4. 在 Windows Phone 上安装自签名证书
将导出的证书文件通过电子邮件发送给自己,利用 Windows Phone 的内置功能识别并安装证书,步骤如下:
1. 打开或导航到电子邮件程序,如使用 Hotmail 作为默认电子邮件服务,登录并创建一封给自己的邮件,添加之前导出的 wp7cert.cer 证书文件作为附件,发送邮件。
2. 在 Windows Phone 设备或模拟器上访问刚发送的邮件,点击 wp7cert.cer 附件,Windows Phone 会提示打开证书文件,点击屏幕获取“安装证书?”提示,点击“安装证书”按钮,安装完成后点击“确定”。
3. 在 Windows Phone 模拟器上打开 Internet Explorer,导航到
https:/machinename/
,此时应能正常访问网站,而不会收到证书无效的警告。
5. 数据安全算法
Windows Phone 支持多种数据加密算法,为设备上的数据存储提供了强大的安全保障:
| 算法名称 | 算法说明 |
| ---- | ---- |
| AES | 对称加密算法,使用相同密钥(密码)进行加密和解密。为增加安全性,加密过程中会添加额外的密钥(盐)。 |
| HMACSHA1 | 生成唯一的消息认证码(MAC),使用 SHA1 哈希函数,输出长度为 160 位。 |
| HMACSHA256 | 同样生成 MAC,使用 SHA256 哈希函数,输出长度为 256 位。 |
| Rfc2898DeriveBytes | 依赖 HMACSHA1 函数,根据提供的密码和盐值生成强密钥,用于数据的加密和解密。 |
| SHA1 | 哈希算法,用于生成数据的哈希值。 |
| SHA256 | 比 SHA1 更安全的哈希算法,生成的哈希值长度为 256 位。 |
6. 使用 HMACSHA1 和 HMACSHA256
HMACSHA1 和 HMACSHA256 函数是单向的,生成 MAC 后无法从 MAC 还原原始消息,因此适合存储安全代码的值。只有提供有效的密码和安全代码,才能生成匹配的 MAC。
创建用户界面
以下是创建用于生成 HMACSHA1 和 HMACSHA256 消息的应用程序界面的步骤:
1. 打开 Visual Studio Express for Windows Phone,创建一个名为 HMACTest 的新项目。
2. 使 MainPage.xaml 具有以下布局:
<!--LayoutRoot contains the root grid where all other page content is placed-->
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!--TitlePanel contains the name of the application and page title-->
<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="24,24,0,12">
<TextBlock x:Name="ApplicationTitle" Text="MY APPLICATION"
Style="{StaticResource PhoneTextNormalStyle}"/>
<TextBlock x:Name="PageTitle" Text="HMAC Test" Margin="-3,-8,0,0"
Style="{StaticResource PhoneTextTitle1Style}"/>
</StackPanel>
<!--ContentPanel - place additional content here-->
<Grid x:Name="ContentGrid" Grid.Row="1">
<Button Content="Generate" Height="72" HorizontalAlignment="Left"
Margin="149,437,0,0" Name="button1" VerticalAlignment="Top" Width="160" Click="button1_Click"
/>
<TextBox Height="72" HorizontalAlignment="Left" Margin="149,23,0,0"
Name="txtMessage" Text="" VerticalAlignment="Top" Width="317" />
<TextBlock Height="99" HorizontalAlignment="Left" Margin="21,216,0,0"
Name="textBlock1" Text="TextBlock" VerticalAlignment="Top" Width="445"
TextWrapping="Wrap" />
<TextBlock Height="114" HorizontalAlignment="Left" Margin="24,321,0,0"
Name="textBlock2" Text="TextBlock" VerticalAlignment="Top" Width="442"
TextWrapping="Wrap" />
<TextBlock Height="30" HorizontalAlignment="Left" Margin="21,44,0,0"
Name="textBlock3" Text="Message:" VerticalAlignment="Top" Width="122" />
</Grid>
</Grid>
总结
通过以上步骤,我们可以在 Windows Phone 设备上建立安全的网络连接,使用自签名证书降低成本,同时利用多种加密算法保护设备上存储的数据。在实际应用中,要注意避免在应用代码中存储密码和盐值,可通过 Web 服务在应用运行时获取这些秘密值,以提高应用的安全性。
流程图
graph LR
A[开始] --> B[测试 SSL 连接]
B --> C{连接成功?}
C -- 是 --> D[创建应用程序]
C -- 否 --> E[检查网络或证书]
D --> F[添加代码与回调函数]
F --> G[运行应用程序]
G --> H[创建自签名证书]
H --> I[导出证书]
I --> J[安装证书到设备]
J --> K[使用加密算法保护数据]
K --> L[结束]
E --> B
以上内容涵盖了 Windows Phone 安全连接和数据加密的主要方面,希望能帮助开发者更好地保障应用程序的安全性。后续我们将继续探讨如何使用 AES 算法进行数据的加密和解密操作。
Windows Phone 安全连接与数据加密指南
7. 使用 AES 算法进行数据加密和解密
AES(Advanced Encryption Standard)是一种对称加密算法,使用相同的密钥(密码)进行加密和解密。为了增强加密的安全性,通常会在加密过程中添加额外的密钥,即“盐(salt)”。以下是使用 AES 算法在 Windows Phone 设备上进行数据加密和解密的详细步骤。
7.1 生成密钥和盐值
在实际应用中,不建议在应用代码中存储密码和盐值,因为这些值容易被反编译工具获取。可以通过 Web 服务在应用运行时获取这些秘密值。这里假设已经从 Web 服务获取到了密码和盐值。
string password = "YourSecretPassword";
string salt = "YourSecretSalt";
// 使用 Rfc2898DeriveBytes 生成密钥
Rfc2898DeriveBytes keyGenerator = new Rfc2898DeriveBytes(password, Encoding.UTF8.GetBytes(salt));
byte[] key = keyGenerator.GetBytes(32); // AES-256 密钥长度为 32 字节
byte[] iv = keyGenerator.GetBytes(16); // 初始化向量长度为 16 字节
7.2 加密数据
使用生成的密钥和初始化向量(IV)对数据进行加密。
public static byte[] EncryptData(string plainText, byte[] key, byte[] iv)
{
using (Aes aesAlg = Aes.Create())
{
aesAlg.Key = key;
aesAlg.IV = iv;
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
using (MemoryStream msEncrypt = new MemoryStream())
{
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
{
swEncrypt.Write(plainText);
}
return msEncrypt.ToArray();
}
}
}
}
7.3 解密数据
使用相同的密钥和 IV 对加密数据进行解密。
public static string DecryptData(byte[] cipherText, byte[] key, byte[] iv)
{
using (Aes aesAlg = Aes.Create())
{
aesAlg.Key = key;
aesAlg.IV = iv;
ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
using (MemoryStream msDecrypt = new MemoryStream(cipherText))
{
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
{
return srDecrypt.ReadToEnd();
}
}
}
}
}
7.4 调用加密和解密方法
string originalData = "This is a secret message.";
byte[] encryptedData = EncryptData(originalData, key, iv);
string decryptedData = DecryptData(encryptedData, key, iv);
Console.WriteLine("Original Data: " + originalData);
Console.WriteLine("Decrypted Data: " + decryptedData);
8. 数据加密的最佳实践
为了确保 Windows Phone 设备上数据的安全性,除了选择合适的加密算法外,还需要遵循以下最佳实践:
| 最佳实践 | 说明 |
|---|---|
| 密钥管理 | 避免在应用代码中硬编码密码和盐值,通过安全的 Web 服务在运行时获取这些值。定期更换密钥,以减少密钥泄露的风险。 |
| 数据分类 | 对数据进行分类,根据数据的敏感程度选择不同的加密级别。对于高度敏感的数据,如用户密码、金融信息等,使用更高级别的加密算法。 |
| 安全传输 | 在数据传输过程中,使用 SSL/TLS 协议进行加密,确保数据在网络传输过程中的安全性。 |
| 代码保护 | 使用代码混淆工具对应用代码进行混淆,增加反编译的难度,保护应用的逻辑和加密算法。 |
9. 总结与展望
通过本文的介绍,我们了解了在 Windows Phone 设备上建立安全连接、使用自签名证书和进行数据加密的方法。在实际开发中,需要根据具体的应用场景选择合适的安全策略,确保用户数据的安全性。
随着移动应用的不断发展,安全问题将变得越来越重要。未来,我们可以期待更强大的加密算法和更智能的安全机制的出现,为移动应用的安全提供更可靠的保障。同时,开发者也需要不断学习和更新安全知识,及时应对新的安全挑战。
流程图
graph LR
A[获取密码和盐值] --> B[生成密钥和 IV]
B --> C{选择操作}
C -- 加密 --> D[加密数据]
C -- 解密 --> E[解密数据]
D --> F[存储加密数据]
E --> G[使用解密数据]
F --> E
以上内容详细介绍了 Windows Phone 设备上的安全连接和数据加密方法,希望能帮助开发者更好地保护用户数据的安全。在实际应用中,要根据具体需求选择合适的安全策略,并不断关注安全领域的最新发展。
超级会员免费看
1

被折叠的 条评论
为什么被折叠?



