如何从WebAPI控制器加密返回的Json

时间:2012-09-11 13:14:11

标签: asp.net-mvc-4 asp.net-web-api

我想在我的asp.net MVC3中开发一个WebAPI控制器,它在输入时发送密码,它看起来类似于:

public string GetPasswordByUserId(int id)
{
    var password = user.password.FirstOrDefault((u) => u.Id == id);
    if (password == null)
    {
         throw new HttpResponseException(HttpStatusCode.NotFound);
    }
    return password;
}

但是如何加密返回的密码?

第二个问题:如果上面的动作方法在APIController中,那么这是否意味着返回的字符串默认会被序列化为Json格式?

2 个答案:

答案 0 :(得分:2)

对于密码加密,您可以使用带有System.Security.Cryptography命名空间/汇编的RC2的对称密钥。

byte[] toEncryptPwd = ASCIIEncoding.ASCII.GetBytes(strToEncrypt);
RC2 encPwd = RC2.Create("RC2");

strToEncrypt = Convert.ToBase64String(encPwd.CreateEncryptor(Key, rgbIV).TransformFinalBlock(toEncryptPwd, 0, toEncryptPwd.Length)); // strToEncrypt is now encrypted
encPwd.Clear();

//您必须在代码或数据库中的某处对密钥和rgbIV进行硬编码。

为什么要将密码作为json返回?我没有遵循设计和需要。

  

返回类型是否为json?

web-API支持自动内容协商,这意味着如果使用HTTP请求API的客户端将accept标头设置为Accept: application/json,那么如果客户端将Accept: application/xml放入标头,则会发送json响应然后API返回xml响应。

答案 1 :(得分:1)

我认为它需要在客户端解密?然后使用HTTPS / SSL。

字符串不会自动序列化,或者至少序列化为您想要的对象。返回要序列化的类型,Web API将自动序列化它。