科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件如何用.NET 2.0 SecureString类保护敏感数据

如何用.NET 2.0 SecureString类保护敏感数据

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

作者:builder.com.cn 2007年6月19日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

获得数据

像.NET Framework的大多数对象一样,SecureString类也提供一个ToString方法。但是,ToString方法源于基本的System.Object类,在SecureString类中它不能被忽略。因此,调用SecureString类的ToString方法只显示对象(System.Security.SecureString)的类型,而没有实际的值。

应用SecureString类的难点在于如何恢复保存在其中的数据。因为它使用Windows的加密服务,要利用它,你需要使用System.Runtime命名空间。下面的C#代码是恢复数据的第一个步骤。它将SecureString类的内容复制到一个长指针对象中。

IntPtr pointerName = System.Runtime.InteropServices.Marshal.SecureStringToBSTR(SecureString object);

植入指针对象后,指针通过System.Runtime.InteropServices.Marshal类转换为一个字符串。这一操作由以下C#代码完成:

Console.WriteLine(System.Runtime.InteropServices.Marshal.PtrToStringBSTR(bstr));

微软文件指出,转换对象到一个指针分配了一个字符串所需的未管理内存,因此任务完成后你应当总是通过调用ZeroFreeBSTR方法释放指针对象,如以下的C#所示:

System.Runtime.InteropServices.Marshal.ZeroFreeBSTR(bstr);

下面的C#代码将在SecureString对象中保存数据与恢复数据、保存和显示内容的例子结合起来:

using System;
using System.Collections.Generic;
using System.Text;
namespace SecureString {
class Program {
static void Main(string[] args) {
System.Security.SecureString ss = new System.Security.SecureString();
ss.AppendChar('T');
ss.AppendChar('e');
ss.AppendChar('c');
ss.AppendChar('h');
ss.AppendChar('R');
ss.AppendChar('e');
ss.AppendChar('p');
ss.AppendChar('u');
ss.AppendChar('b');
ss.AppendChar('l');
ss.AppendChar('i');
ss.AppendChar('c');
ss.AppendChar('.');
ss.AppendChar('c');
ss.AppendChar('o');
ss.AppendChar('m');
Console.WriteLine(ss);
IntPtr ptr = System.Runtime.InteropServices.Marshal.SecureStringToBSTR(ss);
try {
Console.WriteLine(System.Runtime.InteropServices.Marshal.PtrToStringBSTR(ptr));
} finally {
System.Runtime.InteropServices.Marshal.ZeroFreeBSTR(ptr);
} } } }

下面是对应的VB.NET代码:

Module Module1
Sub Main()
Dim ss As New System.Security.SecureString()
ss.AppendChar("T")
ss.AppendChar("e")
ss.AppendChar("c")
ss.AppendChar("h")
ss.AppendChar("R")
ss.AppendChar("e")
ss.AppendChar("p")
ss.AppendChar("u")
ss.AppendChar("b")
ss.AppendChar("l")
ss.AppendChar("i")
ss.AppendChar("c")
ss.AppendChar(".")
ss.AppendChar("c")
ss.AppendChar("o")
ss.AppendChar("m")
Console.WriteLine(ss)
Dim ptr As IntPtr
ptr = System.Runtime.InteropServices.Marshal.SecureStringToBSTR(ss)
Try
Console.WriteLine(System.Runtime.InteropServices.Marshal.PtrToStringBSTR(ptr))
Finally
System.Runtime.InteropServices.Marshal.ZeroFreeBSTR(ptr)
End Try
End Sub
End Module

用SecureString保护数据

SecureString类实现在.NET应用程序中处理敏感数据的功能,而不需要使用加密服务或大量代码来加密数据项。SecureString类还允许你在Windows平台上方便地保存字符串数据并恢复它们,因为基本的String类中处理敏感数据方面缺乏吸引力。

你怎么在应用程序中处理敏感数据呢?你利用加密或其它方法吗?请与.NET社区分享你的经历。

Tony Patton拥有丰富的Java、VB、Lotus及XML认证方面的知识,是一个专业的应用程序开发人员。

责任编辑:张琎

查看本文国际来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章