自定义身份验证Soap头 进行加密解密

原创 2007年09月27日 14:26:00
首先我们在客户端进行对数据的加密:这里我们使用的是64位DES加密算法。
 
  设置密钥(Key)和初始值(IV)可放在配置文件中:
 
<appSettings>
    
<add key="Key" value="fdautoit"/>
    
<add key="IV" value="FDAUTOIT"/>
  
</appSettings>

*注:上面的值只有8个字节(64位)
在.cs文件中获取“Key”和“IV”
string Key, Iv;

            Key 
= ConfigurationManager.AppSettings["Key"];
            Iv 
= ConfigurationManager.AppSettings["IV"];

定义一个加密方法:
private string Encrypt(string p_strEncrypt)
        {
            
//Set the Key and the InitialVector for Encrypt
            byte[] key = Encoding.UTF8.GetBytes(Key);
            
byte[] iv = Encoding.UTF8.GetBytes(Iv);
            
//Convent the string to byte[] of the Data
            byte[] byteData=Encoding.UTF8.GetBytes(p_strEncrypt);
            
//Set Memory space for save the Data
            MemoryStream memoryData = new MemoryStream();
            
//
            
//DES des = new DESCryptoServiceProvider();
            
//RC2 des = new RC2CryptoServiceProvider();
            
//Rijndael des = new RijndaelManaged();
            TripleDES des = new TripleDESCryptoServiceProvider();
            des.Key 
= key;
            des.IV 
= iv;
            des.Mode 
= CipherMode.CBC;
            
//Create  the Method with the Key and IV 
            ICryptoTransform transform = des.CreateEncryptor();
            
//Create the EnCrypt stream
            CryptoStream cryptostream = new CryptoStream(memoryData, transform, CryptoStreamMode.Write);
            
            
//write into the Memory stream
            try
            {
                cryptostream.Write(byteData, 
0, byteData.Length);
            }
            
catch
            {
                
throw new Exception("Encrypt Data wrong of the write to stream!");
            }
            cryptostream.FlushFinalBlock();
            cryptostream.Close();
            
//return memoryData.ToString();
            return Convert.ToBase64String(memoryData.ToArray());
        }
在这个方法返回的是一个加密后的数据。
private void ValidServiceMethod()
        {
            
//Encrypt the username and password of SoapHeader
            string m_strName = Encrypt("admin",EncryptionAlgorithm.Des);
            
string m_strPwd = Encrypt("admin",EncryptionAlgorithm.Des);
            
//new a  SoapHeader and a WebService
            MySoapHeader myheader = new MySoapHeader ();
            MyService myservice 
= new MyService();
           
myheader.UserName = m_strName;
           
myheader.PassWord = m_strPwd;
            
//Set the SoapHeader validate to Service
            myservice.FDSoapHeaderValue = myheader ;
            
//Call Method of webservice 
           myservice.GetMoney();
        }



  这样就完成了加密的过程(用户名,密码,数据可以以参数的形式传入)
在服务 器端同样设置配置文件。这于客户端的是一模一样的。
<appSettings>
    
<add key="Key" value="fdautoit"/>
    
<add key="IV" value="FDAUTOIT"/>
  
</appSettings>
同样在代码文件中获取其值
  编写解密方法:
 private string Decrypt(string p_strDecrypt)
        {
            
// Set the Key and the InitialVector for Decrypt
            byte[] key = Encoding.UTF8.GetBytes(Key);
            
byte[] iv = Encoding.UTF8.GetBytes(Iv);
            
//Covent the string to byte[] with the Encrypt Data
            
//byte[] EncrypData =Encoding.UTF8.GetBytes(p_strDecrypt);
            byte[] EncrypData=Convert.FromBase64String(p_strDecrypt);
            
// Set the Memory stream Space for save data
            MemoryStream memoryData = new MemoryStream();
            
// Create DES for Decrypt
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            des.Key 
= key;
            des.IV 
= iv;
            des.Mode 
= CipherMode.CBC;
            
// Decrypt with the key and InitialVector
            ICryptoTransform transform = des.CreateDecryptor();
            
//Save to MemoryStream
            CryptoStream cryptostream = new CryptoStream(memoryData, transform, CryptoStreamMode.Write);
            
//output the data
            try
            {
                cryptostream.Write(EncrypData, 
0, EncrypData.Length);
            }
            
catch(Exception ex)
            {
                
throw new Exception("write to stream wrong!"+ex.Message);
            }
            cryptostream.FlushFinalBlock();
            cryptostream.Close();
            
//output data
            return Encoding.UTF8.GetString(memoryData.ToArray());
        }
 

Soap头:
 public class MySoapHeader : SoapHeader
    {
        
string _name;
        
string _passWord;

        
public string UserName
        {
            
get { return _name; }
            
set { _name = value; }
        }
        
public string PassWord
        {
            
get { return _passWord; }
            
set { _passWord = value; }
        }
    }

更改上篇中的方法:

 public bool ValiHeader(out string ReturnMsg)
        {
            MySoapHeader myheader=new MySoapHeader();
            
bool flag = false;
            string
UserName=Decrypt(myheader.UserName);
            string PassWord=Decrypt(myheader.PassWord);
            if (UserName == "admin" && PassWord == "admin")
            {
                flag 
= true;
                ReturnMsg 
= "You Are Successfully";
            }
            
else
            {
                ReturnMsg 
= "You Are Failted";
            }
            
return flag;
        }

[WebMethod]
[SoapHeader("header", Direction = SoapHeaderDirection.In)]
public
 string CheckHeader()
        {
            string ReturnMsg="";
            
bool IsTrue=ValiHeader(out  ReturnMsg);
            return ReturnMsg;
        }

如果方法:“ValiHeader”返回的是true 表示验证成功,如果返回的是false表示用户名和密码有误。


有关SoapHeader验证头密码核心代码就 是这样了。其中省略了很多代码。 

相关文章推荐

自定义身份验证Soap头 进行加密解密

自定义身份验证Soap头 进行加密解密     在上篇文章中我们了解了使用自定义SOAP头进行身份验证,使webService服务的身份验证变得灵活,简便。 但是是以明文的方式在网上传输,不能...

使用Soap头自定义身份验证

使用Soap头自定义身份验证     在intranet场景下,Windows身份验证动作良好,并且开发人员可以在自身域中对用户进行身份验证。如果在Web.config文件中将WEB服务设置为W...

VPN 加密解密 身份验证

  • 2009年07月20日 15:13
  • 1.4MB
  • 下载

shiro身份验证入门结合shiro的MD5加密技术自定义Realm-简单Demo

这个Demo,只是一个简单的shiro身份验证部分,不涉及到授权部分。算是shiro入门。 具体的shiro介绍就不说了,官网和草根们在网上都分享了很多,原理自己去看吧。这里直接写代码了。 第一:准备...

web services用soap头实现身份验证

在调用Web Serivices时,往往需要身份验证,使得通过验证的用户才能调用你Web Serivices中的方法.当然你可以通过将参数添加到每个需要自定义身份验证方案的Web services方法...

自定义ASP.NET MVC身份验证(Identity)信息

ASP.NET Identity的一个主要特点就是能够很方便地增加用户身份信息(profile information)。在已有的ASP.NET Membership系统中,用户和身份信息(profi...

Spring AOP自定义注解 身份验证

最近碰到APP开发权限验证的问题 用过滤器不能解决某些无需验证的方法 所以最终选择用AOP 解决 代码如下定义一个权限注解 package com.thinkgem.jeesite.common.an...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自定义身份验证Soap头 进行加密解密
举报原因:
原因补充:

(最多只允许输入30个字)