`

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

阅读更多
首先我们在客户端进行对数据的加密:这里我们使用的是64位DES加密算法。

设置密钥(Key)和初始值(IV)可放在配置文件中:
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><appSettings>
<addkey="Key"value="fdautoit"/>
<addkey="IV"value="FDAUTOIT"/>
</appSettings>

*注:上面的值只有8个字节(64位)
在.cs文件中获取“Key”和“IV”
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->stringKey,Iv;

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

定义一个加密方法:
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->privatestringEncrypt(stringp_strEncrypt)
{
//SettheKeyandtheInitialVectorforEncrypt
byte[]key=Encoding.UTF8.GetBytes(Key);
byte[]iv=Encoding.UTF8.GetBytes(Iv);
//Conventthestringtobyte[]oftheData
byte[]byteData=Encoding.UTF8.GetBytes(p_strEncrypt);
//SetMemoryspaceforsavetheData
MemoryStreammemoryData=newMemoryStream();
//
//DESdes=newDESCryptoServiceProvider();
//RC2des=newRC2CryptoServiceProvider();
//Rijndaeldes=newRijndaelManaged();
TripleDESdes=newTripleDESCryptoServiceProvider();
des.Key
=key;
des.IV
=iv;
des.Mode
=CipherMode.CBC;
//CreatetheMethodwiththeKeyandIV
ICryptoTransformtransform=des.CreateEncryptor();
//CreatetheEnCryptstream
CryptoStreamcryptostream=newCryptoStream(memoryData,transform,CryptoStreamMode.Write);

//writeintotheMemorystream
try
{
cryptostream.Write(byteData,
0,byteData.Length);
}
catch
{
thrownewException("EncryptDatawrongofthewritetostream!");
}
cryptostream.FlushFinalBlock();
cryptostream.Close();
//returnmemoryData.ToString();
returnConvert.ToBase64String(memoryData.ToArray());
}
在这个方法返回的是一个加密后的数据。
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->privatevoidValidServiceMethod()
{
//EncrypttheusernameandpasswordofSoapHeader
stringm_strName= Encrypt("admin",EncryptionAlgorithm.Des);
stringm_strPwd= Encrypt("admin",EncryptionAlgorithm.Des);
//newaSoapHeaderandaWebService
MySoapHeader myheader=new MySoapHeader ();
MyServicemyservice
=newMyService();
myheader.UserName=m_strName;
myheader.PassWord=m_strPwd;
//SettheSoapHeadervalidatetoService
myservice.FDSoapHeaderValue= myheader ;
//CallMethodofwebservice
myservice.GetMoney();
}



这样就完成了加密的过程(用户名,密码,数据可以以参数的形式传入)
在服务 器端同样设置配置文件。这于客户端的是一模一样的。
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><appSettings>
<addkey="Key"value="fdautoit"/>
<addkey="IV"value="FDAUTOIT"/>
</appSettings>
同样在代码文件中获取其值
编写解密方法:
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->privatestringDecrypt(stringp_strDecrypt)
{
//SettheKeyandtheInitialVectorforDecrypt
byte[]key=Encoding.UTF8.GetBytes(Key);
byte[]iv=Encoding.UTF8.GetBytes(Iv);
//Coventthestringtobyte[]withtheEncryptData
//byte[]EncrypData=Encoding.UTF8.GetBytes(p_strDecrypt);
byte[]EncrypData=Convert.FromBase64String(p_strDecrypt);
//SettheMemorystreamSpaceforsavedata
MemoryStreammemoryData=newMemoryStream();
//CreateDESforDecrypt
DESCryptoServiceProviderdes=newDESCryptoServiceProvider();
des.Key
=key;
des.IV
=iv;
des.Mode
=CipherMode.CBC;
//DecryptwiththekeyandInitialVector
ICryptoTransformtransform=des.CreateDecryptor();
//SavetoMemoryStream
CryptoStreamcryptostream=newCryptoStream(memoryData,transform,CryptoStreamMode.Write);
//outputthedata
try
{
cryptostream.Write(EncrypData,
0,EncrypData.Length);
}
catch(Exceptionex)
{
thrownewException("writetostreamwrong!"+ex.Message);
}
cryptostream.FlushFinalBlock();
cryptostream.Close();
//outputdata
returnEncoding.UTF8.GetString(memoryData.ToArray());
}


Soap头:
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->publicclassMySoapHeader:SoapHeader
{
string_name;
string_passWord;

publicstring UserName
{
get{return_name;}
set{_name=value;}
}
publicstringPassWord
{
get{return_passWord;}
set{_passWord=value;}
}
}

更改上篇中的方法:

<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->publicboolValiHeader(outstringReturnMsg)
{
MySoapHeader myheader=new MySoapHeader();
boolflag=false;
string
UserName=Decrypt(myheader.UserName);
string PassWord=Decrypt(myheader.PassWord);
if(UserName=="admin"&&PassWord=="admin")
{
flag
=true;
ReturnMsg
="YouAreSuccessfully";
}
else
{
ReturnMsg
="YouAreFailted";
}
returnflag;
}

<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->[WebMethod]
[SoapHeader("header", Direction = SoapHeaderDirection.In)]
public
stringCheckHeader()
{
stringReturnMsg="";
boolIsTrue=ValiHeader(outReturnMsg);
returnReturnMsg;
}

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


有关SoapHeader验证头密码核心代码就 是这样了。其中省略了很多代码。
分享到:
评论

相关推荐

    asp.net知识库

    利用反射实现ASP.NET控件和数据实体之间的双向绑定,并且在客户端自动验证输入的内容是否合法 asp.net报表解决方法 SQLDMO类的使用 SQL过程自动C#封装,支持从表到基本存储过程生成 使用SQLDMO控制 SQL Server 使用SQL...

    JAVA上百实例源码以及开源项目源代码

     WDSsoft的一款免费源代码 JCT 1.0,它是一个Java加密解密常用工具包。 Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书  Java局域网通信——飞鸽传书源代码,大家都知道VB...

    JAVA上百实例源码以及开源项目

     WDSsoft的一款免费源代码 JCT 1.0,它是一个Java加密解密常用工具包。 Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书  Java局域网通信——飞鸽传书源代码,大家都知道VB...

    php网络开发完全手册

    4.1.2 用户自定义函数的编写 58 4.2 PHP常用函数 59 4.2.1 获得日期时间信息的函数getdate 60 4.2.2 获得当前时间的函数 4.2.2 gettimeofday 61 4.2.3 日期验证函数checkdate 61 4.2.4 格式化本地时间日期的函数date...

    java开源包1

    Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...

    java开源包11

    Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...

    java开源包2

    Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...

    java开源包3

    Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...

    java开源包6

    Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...

    java开源包5

    Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...

    java开源包10

    Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...

    java开源包4

    Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...

    java开源包8

    Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...

    java开源包7

    Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...

    java开源包9

    Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...

    java开源包101

    Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...

    Java资源包01

    Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...

Global site tag (gtag.js) - Google Analytics