ms-help://MS.VSCC/MS.MSDNVS.2052/cpref/html/frlrfsystemsecuritycryptographydesclasstopic.htm

解决方案 »

  1.   

    http://www.fawcette.com/china/XmlFile.aspx?ID=298
      

  2.   

    以下摘自MS文檔
    构建安全的 ASP.NET 应用程序
    身份验证、授权和安全通信
    有关构建安全的 ASP.NET 应用程序 的起点和完整概述,请参见登陆页面。
    总结
    本“如何做”介绍如何在 ASP.NET Web 应用程序或 Web 服务中使用 DPAPI 以加密敏感的数据。
    如何做:在 ASP.NET 中使用 DPAPI(机器存储)
    Web 应用程序经常需要在应用程序配置文件中存储与安全性相关的数据,如数据库连接字符串和服务帐户凭据。出于安全性考虑,这种类型的信息决不要以纯文本形式存储,而一定要在加密后存储。
    本“如何做”介绍如何在 ASP.NET 中使用 DPAPI。它包括 ASP.NET Web 应用程序、Web 服务以及 ASP.NET 中托管的 .NET 远程处理组件。
    此“如何做”中的代码通过托管类库引用 DPAPI,本指南“参考”部分中的“如何做:创建 DPAPI 库”介绍了如何创建该类库。
    备注
    ● DPAPI 能够与机器存储或用户存储(需要一个已加载的用户配置文件)配合使用。DPAPI 默认情况下用于用户存储,但您可以通过将 CRYPTPROTECT_LOCAL_MACHINE 标志传递给 DPAPI 函数来指定使用机器存储。
    ● 这种用户配置文件方式提供了一个额外的安全层,因为它限制了哪些用户能访问机密内容。只有加密该数据的用户才能解密该数据。但是,当通过 ASP.NET Web 应用程序使用 DPAPI 时,使用用户配置文件需要您执行额外的开发工作,因为您需要采取明确的步骤来加载和卸载用户配置文件(ASP.NET 不会自动加载用户配置文件)。
    ● 机器存储方式(本“如何做”中采用的)更容易开发,因为它不需要用户配置文件管理。但是,除非使用一个附加的熵参数,否则并不安全,因为该计算机的任何用户都可以解密数据。(熵是一个设计用来使解密机密内容更为困难的随机值)。使用附加的熵参数出现的问题在于它必须由应用程序安全地存储起来,这带来了另一个密钥管理问题。注意:如果您将 DPAPI 和机器存储一起使用,那么加密字符串对于给定的计算机是特定的,因此您必须在每台计算机上生成加密数据。不要在场或群集中跨计算机复制加密数据。 ● 有关介绍如何在 ASP.NET Web 应用程序中结合使用 DPAPI 和用户存储(通过使用企业服务应用程序中的服务组件)的文章,请参见本指南“参考”部分中“如何做:在具有企业服务的 ASP.NET 中使用 DPAPI(用户存储)”。
    需求
    以下各项介绍了推荐的硬件、软件、网络基础结构、技巧和知识以及您需要的服务包。
    ● Microsoft® Windows® 2000 操作系统
    ● Microsoft Visual Studio® .NET 开发系统
        
    本“如何做”中的过程还要求您具备使用 Microsoft Visual C#™ 开发工具构建 ASP.NET Web 应用程序的相关知识。
    在执行本“如何做”中的步骤之前,必须先执行“如何做:创建 DPAPI 库”中介绍的步骤,以便创建本“如何做”中的代码所使用的 DPAPI 托管类库。
      
    总结
    本“如何做”包括如下步骤:
    1. 创建 ASP.NET 客户端 Web 应用程序
    2. 测试应用程序
    3. 修改 Web 应用程序,读取 Web.Config 文件中的加密连接字符串
      
    1. 创建 ASP.NET 客户端 Web 应用程序
    此过程创建一个 ASP.NET 客户端 Web 应用程序,该应用程序将调用 DPAPI 类库以加密或解密 Web.config 文件中存储的数据。
    u 创建 ASP.NET 客户端 Web 应用程序
    1. 启动 Visual Studio .NET,并创建一个名为 DPAPIClientWeb 的新 C# ASP.NET Web 应用程序。
    2. 添加对(先前在“如何做:创建 DPAPI 库”中创建的)DataProtector.dll 程序集的引用。
    3. 打开 WebForm1.aspx.cs,并将下面的 using 语句添加到文件顶部现有 using 语句的下面。using System.Text;
    using DataProtecrion; 4. 将表 1 中所列的控件添加到 WebForm1.aspx 中。
    表 1:WebForm1.aspx 控件控件类型 文本 ID
    按钮 加密 btnEncrypt
    按钮 解密 btnDecrypt
    文本框 txtDataToEncrypt
    文本框 txtEncryptedData
    文本框 txtDecryptedData
    标签 lblError
    标签 要加密的数据
    标签 加密的数据
    标签 解密的数据
      
    您的 Web 表单应类似于图 1。
     
    {Insert figure: DPAPIHowToWebForm.gif }
    图 1
    DPAPIClientWeb Web 表单
    5. 双击“加密”按钮,创建一个按钮单击事件处理程序。DataProtector dp = new DataProtector( DataProtector.Store.USE_MACHINE_STORE );
    try
    {
    byte[] dataToEncrypt = Encoding.ASCII.GetBytes(txtDataToEncrypt.Text);
    // Not passing optional entropy in this example
    // Could pass random value (stored by the application) for added security
    // when using DPAPI with the machine store.
    txtEncryptedData.Text =
    Convert.ToBase64String(dp.Encrypt(dataToEncrypt,null));
    }
    catch (Exception ex)
    {
    lblError.ForeColor = Color.Red;
    lblError.Text = "Exception.<br>" + ex.Message;
    return;
    }
    lblError.Text = "";6. 返回到该 Web 表单,并双击“解密”按钮。将下面的代码添加到按钮单击事件处理程序中。DataProtector dp = new DataProtector( DataProtector.Store.USE_MACHINE_STORE );
    try
    {
    byte[] dataToDecrypt = Convert.FromBase64String(txtEncryptedData.Text);
    // Optional entropy parameter is null. 
    // If entropy was used within the Encrypt method, the same entropy parameter
    // must be supplied here
    txtDecryptedData.Text = 
    Encoding.ASCII.GetString(dp.Decrypt(dataToDecrypt,null));
    }
    catch (Exception ex)
    {
    lblError.ForeColor = Color.Red;
    lblError.Text = "Exception.<br>" + ex.Message;
    return;
    }
    lblError.Text = ""; 7. 在“构建”菜单中,单击“构建解决方案”
      
    2. 测试应用程序
    此过程测试 Web 应用程序以确认数据已成功加密和解密。
    u 测试应用程序
    1. 按 Ctrl+F5 键以运行 Web 应用程序。
    2. 在“要加密的数据”文本框中输入一个字符串,然后单击“加密”。
    确认加密的数据(采用 Base64 加密的格式)显示在“加密的数据”文本框中。
    3. 单击“解密”按钮。 
    确认加密的数据已成功解密并显示在“解密的数据”文本框中。
      
    3. 修改 Web 应用程序,读取 Web.Config 文件中的加密连接字符串
    该过程采用一个加密的数据库连接字符串,并把加密的密码文本放在该应用程序的 Web.config 文件的 <appSettings> 元素内。然后您将添加代码,从该配置文件中读取和解密该字符串。
    u 修改 Web 应用程序,读取 Web.Config 文件中的加密连接字符串
    1. 返回到 Visual Studio .NET,以“设计器”模式显示 WebForm1.aspx。
    2. 将另一个按钮添加到表单。将其“文本”属性设置为“从配置文件解密字符串”并将其 ID 属性设置为 btnDecryptConfig。
    3. 双击该按钮,创建一个按钮单击事件处理程序。 
    4. 将下面的 using 语句添加到文件顶部现有 using 语句的下面。using System.Configuration; 5. 返回到 btnDecryptConfig_Click 事件处理程序,添加下面的代码,以便从 Web.config 文件的 <appSettings> 部分检索数据库连接字符串。DataProtector dp = new DataProtector( DataProtector.Store.USE_MACHINE_STORE );
    try
    {
    string appSettingValue =
    ConfigurationSettings.AppSettings["connectionString"];
    byte[] dataToDecrypt = Convert.FromBase64String(appSettingValue);
    string connStr = Encoding.ASCII.GetString(
    dp.Decrypt(dataToDecrypt,null));
    txtDecryptedData.Text = connStr;
    }
    catch (Exception ex)
    {
    lblError.ForeColor = Color.Red;
    lblError.Text = "Exception.<br>" + ex.Message;
    return;
    }
    lblError.Text = ""; 5. 在“构建”菜单中,单击“构建解决方案”来重新生成项目。
    6. 右击 WebForm1.aspx,然后单击“在浏览器中查看”。
    7. 在“要加密的数据”字段中输入一个数据库连接字符串,例如下面的字符串。server=(local);Integrated Security=SSPI; database=Northwind 8. 单击“加密”按钮。
    9. 选择加密的密码文本,将它复制到剪贴板。
    10. 切换到 Visual Studio .NET,打开 Web.config,将 <appSettings>元素添加到 <system.web> 元素的外面。将当前剪贴板上的加密连接字符串分配到 value 属性。<appSettings>
    <add key="connectionString" value="encrypted connection string" /> 
    </appSettings> 11. 保存 Web.config。
    12. 单击“从配置文件解密字符串”按钮,确认从 Web.config 文件中成功读取加密的数据库连接字符串,并确认解密的连接字符串成功显示在“解密的数据”字段中。
      
    参考资料
    有关详细信息,请参见本指南“参考”部分中的下列相关“如何做”内容:
    ● 本指南“参考”部分中的“如何做:创建 DPAPI 库”。
    ● 本指南“参考”部分中的“如何做:在具有企业服务的 ASP.NET 中使用 DPAPI(机器存储)”。
      

  3.   

    建議采取簡單的辦法:將每個字母的asscii值增大或者減小,然后存在數據庫里面或者文件里面。解密的時候只需要進行相反的操作就可以得到原始的字符串
      

  4.   

    樓上的,如果在修改字串的時候使用了Unicode會不會有問題?(比如Copy & Paste)