【问题标题】:Encrypt Webclient data in c#在c#中加密Webclient数据
【发布时间】:2021-10-16 09:56:59
【问题描述】:

我想加密 JSON 字符串并使用 webclient 发布。 我有一个要传递给 RESTFUL API 的 json 字符串。 但是,这里的问题是我已经在我的项目中编写了所有文件中的代码,如下所示

obj = new WebClient();
Result = objWebClient.UploadString(API_Url ,JsonData_String);

我不想去更改我项目的每个文件/控制器中的每个 webclient 请求,因为它需要做很多工作。我想将代码添加到集中位置,以便所有 webclient 方法都可以访问它。 那么我可以扩展 UploadString 方法并添加一些在 POST 之前加密代码的机制。如果不是,我该如何实现。

此外,我无法控制 API url 以使用 HTTPS。

【问题讨论】:

  • 为什么不在 API url 上使用 HTTPS?
  • 是的,我可以拥有,但 API url 不在我的控制范围内。感谢回复
  • Api url 在您的代码中;当然它在你的控制之下。如果你说 api 在服务器端不支持 https,那么让他们打开它;这很简单,没有理由不这样做。您甚至不必再为 ssl 证书付费。如果他们不这样做,那么我看不到 api 将如何理解您的加密数据,所以这不是一个解决方案,除非有人会努力升级 api 这样做(但你不会打扰,你会只需打开https)
  • 从哪里获取 JSON 数据?我想您使用的是 Newtonsoft 的 JSON 库之类的东西。您可以编写一个包装类,通过 Newtonsoft 创建您的 JSON 字符串,但在它返回它之前,您对其进行加密。您的消息的接收者需要执行相同的操作,但顺序相反:解密然后调用 Newtonsoft。而且你需要考虑加密算法(RSA/AES)、密钥管理和密钥交换......

标签: c# encryption model-view-controller webclient rest


【解决方案1】:

你可以写一个extension method 的 WebClient 例如UploadStringEncrypted() 然后在您的源文件中进行全局搜索和替换以使用您的扩展方法。

static public class Ext
{
    static public void UploadStringEncrypted(this WebClient webClient, string url, string jsonData)
    {
        var encrypted = SomehowEncrypt(jsonData);
        webClient.UploadString(url, encrypted);     
    }
}

示例用法:

obj = new WebClient();
Result = objWebClient.UploadStringEncrypted(API_Url ,JsonData_String);

【讨论】:

  • 感谢您的回复.. 我如何在上面的代码行中使用这个 Ext 类
  • 添加了使用示例。
猜你喜欢
  • 2018-10-27
  • 2012-03-09
  • 2010-12-03
  • 2010-11-18
  • 2012-12-05
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
相关资源
最近更新 更多