Tuesday, April 21, 2009

加密和解密

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace EncryptionSample
{
class Program
{
static void Main(string[] args)
{
string asd = PassWord.JiaMi("kevin");
string asd2 = PassWord.JieMi(asd);

Console.WriteLine("加密之后: "+asd);
Console.WriteLine("***************");
Console.WriteLine("解密之后: "+asd2);
}
}

public class PassWord
{
private PassWord()
{ }
///
/// 解密程序
///

/// 加密的密码
/// 解密后的密码
public static string JieMi(string dd)
{
string vkey = "zhangzengbao";
int vkeylen = vkey.Length;
int vKeyPos = 0;
int vSrcPos = 0;
int vSrcAsc = 0;
int vTmpSrcAsc = 0;
string vDest = "";
string ff = dd.Substring(0, 2);
int ddddd = Convert.ToInt32(ff, 16);
string fff = Convert.ToString(ddddd, 10);
int vOffset = Convert.ToInt32(fff);

vSrcPos = 2;
while (vSrcPos < dd.Length)
{

int eee = Convert.ToInt32(dd.Substring(vSrcPos, 2), 16);

vSrcAsc = Convert.ToInt32(Convert.ToString(eee, 10));
if (vKeyPos < vkeylen)
{
vKeyPos = vKeyPos + 1;
}
else
{
vKeyPos = 1;
}
char ddddff = (vkey[vKeyPos - 1]);
//vKeyPos = vKeyPos - 1;
vTmpSrcAsc = vSrcAsc ^ (int)(vkey[vKeyPos - 1]);
if (vTmpSrcAsc <= vOffset)
{
vTmpSrcAsc = 255 + vTmpSrcAsc - vOffset;
}
else
{
vTmpSrcAsc = vTmpSrcAsc - vOffset;
}

vDest = vDest + (char)(vTmpSrcAsc);
vOffset = vSrcAsc;
vSrcPos = vSrcPos + 2;
}
return vDest;
}
///
/// 加密程序
///

/// 要加密的字符串
/// 加密后的字符串
public static string JiaMi(string dd)
{

string vkey = "zhangzengbao";
int vkeylen = vkey.Length;
int vKeyPos = 0;
int vSrcAsc = 0;
int vRange = 256;
int voffset = 0;
string vDest = "";
Random ro = new Random();
voffset = ro.Next(vRange);
//voffset = ro.Next(17, 256);

vDest = Convert.ToString(voffset, 16);
if (vDest.Length < 2)
{
vDest = "0" + vDest;
}
for (int i = 0; i < dd.Length; i++)
{
//byte[] B = Encoding.ASCII.GetBytes(a);
// byte[] b = Encoding.ASCII.GetBytes(dd[i].ToString());
// int bb =(int) b[0];
vSrcAsc = ((int)dd[i] + voffset) % 255;//求模
// vSrcAsc = (bb + voffset) % 255;
if (vKeyPos {
vKeyPos = vKeyPos + 1;
}
else
{
vKeyPos = 1;
}

vRange = (int)(vkey[vKeyPos-1]);
//byte[] c = Encoding.ASCII.GetBytes(vkey[vKeyPos - 1].ToString());
// int cc = (int)c[0];
//vRange = cc;
vSrcAsc=vSrcAsc ^ vRange;
string v1=Convert.ToString(vSrcAsc, 16);
if (v1.Length < 2)
{
v1 = "0" + v1;
}
vDest = vDest +v1;

voffset=vSrcAsc;

}
vDest = vDest.ToUpper();
return vDest;

}
}
}

如何在 Web 服务器上设置 SSL

目标
本章的目标是:

获取 SSL 证书。

在 IIS 服务器上安装 SSL 证书。

配置虚拟目录以要求 SSL。
返回页首
适用范围
本章适用于以下产品和技术:

Microsoft Windows® XP 或 Windows 2000 Server (Service Pack 3) 以及更高版本的操作系统

Microsoft Internet 信息服务 5.0

Microsoft 证书服务(如果您需要生成自己的证书)
返回页首
如何使用本章内容
若要学好本章内容:

您必须有配置 IIS 的经验。

如果您想生成自己的证书,则必须能够访问某个证书颁发机构 (CA),如 Microsoft 证书服务。

如果您不希望生成自己的证书,则必须决定将向哪个商业证书颁发机构申请 SSL 证书。大多数证书颁发机构 (CA) 会就此服务收费。

阅读第 4 章安全通信。其中介绍了 SSL 及其最常见的用途。
返回页首
摘要
安全套接字层 (SSL) 是一套提供身份验证、保密性和数据完整性的加密技术。SSL 最常用来在 Web 浏览器和 Web 服务器之间建立安全通信通道。它也可以在客户端应用程序和 Web 服务之间使用。
为支持 SSL 通信,必须为 Web 服务器配置 SSL 证书。本章介绍如何获取 SSL 证书,以及如何配置 Microsoft® Internet 信息服务 (IIS),以便支持 Web 浏览器和其他客户端应用程序之间使用 SSL 安全地进行通信。
返回页首
生成证书申请
此过程创建一个新的证书申请,此申请可发送到证书颁发机构 (CA) 进行处理。如果成功,CA 将给您发回一个包含有效证书的文件。

生成证书申请
1.
启动 IIS Microsoft 管理控制台 (MMC) 管理单元。
2.
展开 Web 服务器名,选择要安装证书的 Web 站点。
3.
右键单击该 Web 站点,然后单击“属性”。
4.
单击“目录安全性”选项卡。
5.
单击“安全通信”中的“服务器证书”按钮,启动 Web 服务器证书向导。
注意:如果“服务器证书”不可用,可能是因为您选择了虚拟目录、目录或文件。返回第 2 步,选择 Web 站点。
6.
单击“下一步”跳过欢迎对话框。
7.
单击“创建一个新证书”,然后单击“下一步”。
8.
该对话框有以下两个选项:

“现在准备申请,但稍后发送”
该选项总是可用的。

“立即将申请发送到在线证书颁发机构”
仅当 Web 服务器可以在配置为颁发 Web 服务器证书的 Windows 2000 域中访问一个或多个 Microsoft 证书服务器时,该选项才可用。在后面的申请过程中,您有机会从列表中选择将申请发送到的颁发机构。
单击“现在准备申请,但稍后发送”,然后单击“下一步”。
9.
在“名称”字段中键入证书的描述性名称,在“位长”字段中键入密钥的位长,然后单击“下一步”。
向导使用当前 Web 站点名称作为默认名称。它不在证书中使用,但作为友好名称以助于管理员识别。
10.
在“组织”字段中键入组织名称(例如 Contoso),在“组织单位”字段中键入组织单位(例如“销售部”),然后单击“下一步”。
注意:这些信息将放在证书申请中,因此应确保它的正确性。CA 将验证这些信息并将其放在证书中。浏览您的 Web 站点的用户需要查看这些信息,以便决定他们是否接受证书。
11.
在“公用名”字段中,键入您的站点的公用名,然后单击“下一步”。
重要说明:公用名是证书最后的最重要信息之一。它是 Web 站点的 DNS 名称(即用户在浏览您的站点时键入的名称)。如果证书名称与站点名称不匹配,当用户浏览到您的站点时,将报告证书问题。
如果您的站点在 Web 上并且被命名为 www.contoso.com,这就是您应当指定的公用名。
如果您的站点是内部站点,并且用户是通过计算机名称浏览的,请输入计算机的 NetBIOS 或 DNS 名称。
12.
在“国家/地区”、“州/省”和“城市/县市”等字段中输入正确的信息,然后单击“下一步”。
13.
输入证书申请的文件名。
该文件包含类似下面这样的信息。
-----BEGIN NEW CERTIFICATE REQUEST-----
MIIDZjCCAs8CAQAwgYoxNjA0BgNVBAMTLW1penJvY2tsYXB0b3Aubm9ydGhhbWVy...
-----END NEW CERTIFICATE REQUEST-----
这是您的证书申请的 Base 64 编码表示形式。申请中包含输入到向导中的信息,还包括您的公钥和用您的私钥签名的信息。
将此申请文件发送到 CA。然后 CA 会使用证书申请中的公钥信息验证用您的私钥签名的信息。CA 也验证申请中提供的信息。
当您将申请提交到 CA 后,CA 将在一个文件中发回证书。然后您应当重新启动 Web 服务器证书向导。
14.
单击“下一步”。该向导显示证书申请中包含的信息概要。
15.
单击“下一步”,然后单击“完成”完成申请过程。
证书申请现在可以发送到 CA 进行验证和处理。当您从 CA 收到证书响应以后,可以再次使用 IIS 证书向导,在 Web 服务器上继续安装证书。
返回页首
提交证书申请
此过程使用 Microsoft 证书服务提交在前面的过程中生成的证书申请。

提交证书申请
1.
使用“记事本”打开在前面的过程中生成的证书文件,将它的整个内容复制到剪贴板。
2.
启动 Internet Explorer,导航到 http://hostname/CertSrv,其中 hostname 是运行 Microsoft 证书服务的计算机的名称。
3.
单击“申请一个证书”,然后单击“下一步”。
4.
在“选择申请类型”页中,单击“高级申请”,然后单击“下一步”。
5.
在“高级证书申请”页中,单击“使用 Base64 编码的 PKCS#10 文件提交证书申请”,然后单击“下一步”。
6.
在“提交一个保存的申请”页中,单击“Base64 编码的证书申请(PKCS #10 或 #7)”文本框,按住 CTRL+V,粘贴先前复制到剪贴板上的证书申请。
7.
在“证书模板”组合框中,单击“Web 服务器”。
8.
单击“提交”。
9.
关闭 Internet Explorer。
返回页首
颁发证书

颁发证书
1.
从“管理工具”程序组中启动“证书颁发机构”工具。
2.
展开您的证书颁发机构,然后选择“挂起的申请”文件夹。
3.
选择刚才提交的证书申请。
4.
在“操作”菜单中,指向“所有任务”,然后单击“颁发”。
5.
确认该证书显示在“颁发的证书”文件夹中,然后双击查看它。
6.
在“详细信息”选项卡中,单击“复制到文件”,将证书保存为 Base-64 编码的 X.509 证书。
7.
关闭证书的属性窗口。
8.
关闭“证书颁发机构”工具。
返回页首
在 Web 服务器上安装证书
此过程在 Web 服务器上安装在前面的过程中颁发的证书。

在 Web 服务器上安装证书
1.
如果 Internet 信息服务尚未运行,则启动它。
2.
展开您的服务器名称,选择要安装证书的 Web 站点。
3.
右键单击该 Web 站点,然后单击“属性”。
4.
单击“目录安全性”选项卡。
5.
单击“服务器证书”启动 Web 服务器证书向导。
6.
单击“处理挂起的申请并安装证书”,然后单击“下一步”。
7.
输入包含 CA 响应的文件的路径和文件名,然后单击“下一步”。
8.
检查证书概述,单击“下一步”,然后单击“完成”。
现在,已在 Web 服务器上安装了证书。
返回页首
将资源配置为要求 SSL 访问
此过程使用 Internet 服务管理器,将虚拟目录配置为要求 SSL 访问。您可以为特定的文件、目录或虚拟目录要求使用 SSL。客户端必须使用 HTTPS 协议访问所有这类资源。

将资源配置为要求 SSL 访问
1.
如果 Internet 信息服务尚未运行,则启动它。
2.
展开您的服务器名称和 Web 站点。(这必须是已安装证书的 Web 站点)
3.
右键单击某个虚拟目录,然后单击“属性”。
4.
单击“目录安全性”选项卡。
5.
单击“安全通信”下的“编辑”。
6.
单击“要求安全通道 (SSL)”。
现在客户端必须使用 HTTPS 浏览到此虚拟目录。
7.
单击“确定”,然后再次单击“确定”关闭“属性”对话框。
8.
关闭 Internet 信息服务。

ref:
http://www.microsoft.com/china/technet/security/guidance/secmod30.mspx

如何设置客户端证书

目标
本章的目标是:

获取并安装客户端证书。

创建一个需要客户端证书的 ASP.NET Web 应用程序。
返回页首
适用范围
本章适用于以下产品和技术:

Microsoft® Windows® XP 或 Windows 2000 Server (Service Pack 3) 以及更高版本的操作系统

Microsoft Internet 信息服务 (IIS) 5.0

Microsoft 证书服务(如果您需要生成自己的证书)

Microsoft .NET Framework 版本 1.0 (Service Pack 2) 以及更高版本

Microsoft Visual C#® .NET
返回页首
如何使用本章内容
若要学好本章内容:

您必须具有使用 Visual C# .NET 和 Microsoft Visual Studio® .NET 的经验。

您必须具有使用 ASP.NET 开发 Web 应用程序的经验。

您必须有配置 IIS 的经验。

如果您想生成新的客户端证书,则必须能够访问某个证书颁发机构 (CA),如 Microsoft 证书服务。

如果您不希望生成自己的证书,则必须决定将从哪个商业证书颁发机构申请客户端证书。某些证书颁发机构 (CA) 会就此服务收费。

您必须具有一台安装了 SSL 证书的 Web 服务器。有关详细信息,请参见如何在 Web 服务器上设置 SSL。

要了解客户端证书与其他身份验证形式之间的相同与差异之处,请参见第 2 章 ASP.NET 应用程序的安全模型。
返回页首
摘要
客户端证书为 Web 应用程序提供了一种非常好的身份验证机制。浏览器或其他客户端应用程序必须先提供有效的身份验证,然后才能获得应用程序访问权限,这使得客户端不必提供用户名和密码。因此,在创建供其他客户端应用程序访问的安全 Web 服务时,客户端的证书就显得特别有用。
本章详细介绍如何获取和安装客户端证书,并演示了如何创建需要客户端证书的 Web 应用程序。
返回页首
创建一个简单的 Web 应用程序
在此过程中,您将创建一个供测试用的简单 Web 应用程序。

创建一个简单的 Web 应用程序
1.
启动 Visual Studio .NET 并创建一个新的名为 SecureApp 的 Visual C# ASP.NET Web 应用程序。
2.
从工具箱中将一个标签控件拖放到 WebForm1.aspx Web 窗体上,然后将其 ID 属性设置为 message。
3.
再拖放一个标签至 WebForm1.aspx 窗体上,然后将其 ID 属性设置为 certData。
4.
将下面的代码添加到 Page_Load 事件过程中。
string username;
username = User.Identity.Name;
message.Text = "Welcome " + username;
HttpClientCertificate cert = Request.ClientCertificate;
if (cert.IsPresent)
{
certData.Text = "检索到客户端证书";
}
else
{
certData.Text = "无客户端证书";
}
5.
在“生成”菜单上,单击“生成解决方案”。
6.
启动 Internet Explorer 并导航至 http://localhost/SecureApp/WebForm1.aspx。
页面应该显示“欢迎”消息(不显示用户名,因为用户尚未经过身份验证)和“没有客户端证书”。
7.
关闭 Internet Explorer。
返回页首
将 Web 应用程序配置为需要客户端证书
此过程使用 Internet 信息服务 (IIS) 将 Web 应用程序的虚拟目录配置为需要证书。
本过程假设您在 Web 服务器上安装了有效的证书。有关安装 Web 服务器证书的详细信息,请参见如何在 Web 服务器上设置 SSL。

将 Web 应用程序的虚拟目录配置为需要证书
1.
在 Web 服务主机上启动 IIS。
2.
导航到 SecureApp 虚拟目录。
3.
右键单击 SecureApp,然后单击“属性”。
4.
单击“目录安全性”选项卡。
5.
单击“安全通信”下的“编辑”。
如果无法使用“编辑”,则可能没有安装 Web 服务器证书。
6.
选择“要求安全通道 (SSL)”复选框。
7.
选择“需要客户端证书”选项。
8.
单击“确定”,然后再单击“确定”。
9.
在“继承覆盖”对话框中,单击“全选”,然后单击“确定”关闭“SecureApp 属性”对话框。
这会将新的安全设置应用于虚拟根目录下的所有子目录。
10.
要确认 Web 站点已正确配置,启动 Internet Explorer 并(使用 HTTPS)浏览到 https://localhost/secureapp/webform1.aspx。
11.
Internet Explorer 显示“客户身份验证”对话框,要求您选择一个客户端证书。因为您尚未安装客户端证书,所以单击“确定”,确认显示通知您页面需要客户端证书的错误页面。
12.
关闭 Internet Explorer。
返回页首
申请并安装客户端证书
此过程安装客户端证书。您可以使用由任何证书颁发机构颁发的证书,也可按照后面几节所述使用 Microsoft 证书服务来生成自己的证书。
此过程假设 Microsoft 证书服务是为挂起的申请配置的,这要求管理员专门颁发证书。它也可以配置为应证书申请自动颁发证书。

检查证书申请状态设置
1.
在 Microsoft 证书服务计算机上,从“管理工具”程序组中选择“证书颁发机构”。
2.
展开“证书颁发机构(本地)”,右键单击证书颁发机构并单击“属性”。
3.
单击“策略模块”选项卡,然后单击“配置”。
4.
检查默认操作。
以下过程假设选中了“将证书申请状态设成待定。管理员必须专门颁发证书”。

申请客户端证书
1.
启动 Internet Explorer 并导航至 http://hostname/certsrv,其中 hostname 是安装 Microsoft 证书服务的计算机的名称。
2.
单击“申请一个证书”,然后单击“下一步”。
3.
在“选择申请类型”页上,单击“用户证书”,然后单击“下一步”。
4.
单击“提交”完成申请。
5.
关闭 Internet Explorer。

颁发客户端证书
1.
从“管理工具”程序组中启动“证书颁发机构”工具。
2.
展开您的证书颁发机构,然后选择“挂起的申请”文件夹。
3.
选择刚提交的证书申请,指向“操作”菜单上的“所有任务”,然后单击“颁发”。
4.
确认该证书显示在“颁发的证书”文件夹中,然后双击查看它。
5.
在“详细信息”选项卡上,单击“复制到文件”将证书保存为 Base-64 编码的 X.509 证书。
6.
关闭证书的属性窗口。
7.
关闭证书颁发机构工具。

安装客户端证书
1.
要查看证书,启动 Windows 资源管理器,导航至在前一过程中保存的 .cer 文件,然后双击它。
2.
单击“安装证书”,然后在“证书导入向导”的首页单击“下一步”。
3.
选择“根据证书类型,自动选择证书存储区”,然后单击“下一步”。
4.
单击“完成”以完成该向导。关闭确认消息框,然后单击“确定”关闭证书。
返回页首
验证客户端证书操作
此过程验证您是否可以使用客户端证书访问 SecureApp 应用程序。

验证客户端证书操作
1.
启动 Internet Explorer 并导航至 https://localhost/secureapp/webform1.aspx。
2.
确认 Web 页成功显示。
返回页首
其他资源
有关详细信息,请参见本指南中的如何在 Web 服务器上设置 SSL。

ref:http://www.microsoft.com/china/technet/security/guidance/secmod31.mspx