我正在使用sha-1来加密密码,然后将其发送到服务。
正在加密以下密码。
客户端
httpgetCommand.cs
public class HttpGetCommand<TResult> : AbstractHttpCommand<TResult>
where TResult : class
{
private readonly Dictionary<string, object> _parameters = new Dictionary<string, object>();
protected override string TypeRequest { get { return "GET"; } }
public HttpGetCommand(string url)
: base(url)
{ }
public HttpGetCommand(string url, Action<TResult> successAction, Action<Exception> errorAction)
: base(url, successAction, errorAction)
{
}
public HttpGetCommand<TResult> AddParameter(object urlParameter)
{
AddUrlParameter(urlParameter);
return this;
}
public HttpGetCommand<TResult> AddParameter(string name, object value)
{
_parameters.Add(name, value);
return this;
}
public T AddParameter<T>(string name, object value)
where T : HttpGetCommand<TResult>
{
_parameters.Add(name, value);
return (T)this;
}
public override TResult Execute()
{
return _httpService.Get<TResult>(Url, _parameters);
}
public async override Task ExecuteAsync()
{
await _httpService.GetAsync(Url, _parameters, SuccessAction, ErrorAction);
}
public override string ToString()
{
return base.ToString() + GetParams();
}
private string GetParams()
{
if (!_parameters.Any())
{
return string.Empty;
}
var sb = new StringBuilder();
sb.Append("?");
foreach (var parameter in _parameters)
{
sb.AppendFormat("{0}&{1}", parameter.Key, parameter.Value.ToString().Replace(' ', '+'));
}
return sb.ToString();
}
}
logincommand.cs
public class LoginCommand : HttpGetCommand<LoginResult>
{
public LoginCommand()
: base("Login")
{
}
public LoginCommand(Action<LoginResult> successAction, Action<Exception> errorAction)
: base("Login", successAction, errorAction)
{
}
public LoginCommand SetUsername(string username)
{
return AddParameter<LoginCommand>("username", username);
}
public LoginCommand SetPassword(string password)
{
return AddParameter<LoginCommand>("userpassword", password);
}
}
在代码中,我按以下方式打电话
return new LoginCommand()
.SetUsername(username)
.SetPassword(password)
.Execute();
服务方面
[OperationContract]
[WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
Stream Login(string username, string userpassword);
但是,如果Encyrtion具有特殊的特征,例如" ",则无法与服务联系。
例如,如果来自客户端的加密密码,例如
d908980/fhjdfgf89sdsd+sdsd
然后,它可以到达服务方面如下
d908980/fhjdfgf89sdsd sdsd
您的GetParams
实现是有缺陷的。您需要确保查询字符串正确编码,并以查询字符串的正确格式编码。
sb.AppendFormat("{0}={1}&",
Uri.EscapeDataString(parameter.Key),
Uri.EscapeDataString(parameter.Value.ToString())
);