加密并JSON序列化一个对象

3
我有一个MVC应用程序和一个API,我需要为每个请求从MVC应用程序传递一个自定义凭据对象到API。我想加密凭据对象并将其发送到API请求的标头中。如何实现呢?我已经找到了大量关于如何加密字符串的文章,但没有关于加密格式不是XML的对象的文章。

1
你有没有考虑使用安全套接字(https等),它可以为你加密所有内容?如果我没记错的话,这种调用的头部也是加密的。 - Martin Noreke
你可以尝试使用 NewtonSoft.Json 将对象序列化为 JSON,然后发送到任何 API,并在 API 代码中进行反序列化。 - Dhrumil
如果API支持HTTPS,@MartinNoreke的答案将是最好的选择。 如果您不想通过HTTPS发送请求,并且您可以控制API的工作方式,那么使用公钥/私钥对应该可以解决问题(将对象序列化为JSON,然后使用公钥加密字符串,发送到API,使用私钥解密,然后反序列化)。 - Irwene
如果您可以控制API,请考虑进行挑战/响应握手,返回一个HMAC。这样密码就不会通过网络发送。 HMAC确保每个会话只执行一次该过程。 - Mattias Åslund
3个回答

1
你的要求不是很明确,但听起来可能可以通过JSON Web Tokens来满足。有许多针对不同平台的库可以为您处理必要的加密。使用JWT时,重点是令牌的身份验证和完整性,而不是保密性。
如果您想实现自己的方法,请按照加密字符字符串的教程进行操作,因为JSON 就是一个字符字符串。

0
  1. 将您的凭证对象设置为Serializable
  2. 按照此处所述,将对象序列化为字符串。
  3. 加密该字符串。

如果您坚持使用JSON序列化,可以使用示例。


0

关键在于将您的对象转换为字符串。正如您所说,您已经看到了一些示例(加密字符串)。使用json.Net的DeserializeObject方法生成一个字符串,对该字符串进行加密,然后只需在此处使用add方法; https://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.headers%28v=vs.110%29.aspx将其附加到标头集合中。

在后端,您只需解密,反序列化并继续前进。

请注意,正如评论中指出的那样,使用类似HTTPS的东西更可取。为什么要自己加密,然后发送HTTP,而不是使用可以为您执行此操作的协议呢?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接