【问题标题】:How can I encrypt a string in JavaScript and decrypt that string in C#如何在 JavaScript 中加密字符串并在 C# 中解密该字符串
【发布时间】:2011-07-26 22:20:36
【问题描述】:

我之前看到过这个问题,尽管在这些情况下,发帖人想在面向公众的网站上加密某些内容(通常是 url),而回答大多是“不要!”。然而,就我而言,JavaScript 将存储在一个非公开的内部系统中,所以我认为我有更多的余地。类似问题的一个示例是:How to encrypt url in javascript and decrypt in c# - 答案实际上并没有回答问题。

我的“JavaScript”实际上是“SuiteScript”,它被定义为“SuiteScript 是一种基于 JavaScript 的 API,它使开发人员能够扩展 NetSuite”,其中 NetSuite 是托管的 CRM 包,因此任何用于加密我的代码字符串将对所有人隐藏,但我公司的员工除外(因此被认为是安全隐藏的)。

我想做的是:

  1. 生成查询字符串(例如 userid=guidValue&firstName=stringValue&company=stringValue&...),
  2. 使用安全的方法(例如 AES256、RSA,任何人认为安全的方法)对其进行加密,
  3. 在我的基于 C# 的网站上调用网页,在 URL 中传递此字符串(例如 mysite.com/mypage.aspx?encStr=encryptedString)
  4. 让 C# 页面对其进行解密,分离名称/值对并对其进行处理。

我用谷歌搜索并搜索了 stackoverflow,但没有找到任何文章或答案提供了两种技术都可以使用的加密方法的明确说明。有人有这样的指示吗?

【问题讨论】:

  • 你想保护谁的信息?如果它是一个内部系统,难道不是每个人都应该被隐含地信任吗?如果不是,那么它是非公开的这一事实绝对没有区别。如果不向 Web 浏览器客户端发送所有代码以找出如何欺骗安全性,您就无法在 Web 浏览器客户端进行加密。
  • 如果您通过 ssl 发布表单,那么您不需要加密消息。为此进行显式加密将是过度的。
  • HTTPS 不是一个选项,因为我无法控制托管的 NetSuite 服务器。当字符串被发送到我的基于 C# 的网站时,我正在保护信息不被窥探,这不是内部的。我不需要发送找出安全欺骗所需的代码。我认为如果在 JavaScript 中使用了“密钥”并且 C# 可以使用相同的“密钥”(无需发送),那么可以进行解密
  • 澄清一下,您的接收网站是否托管在 NetSuite 服务器上?
  • 不,接收网站托管在其他地方。我明白你的意思,但在这种情况下,HTTPS 仍然不是一个选项。

标签: c# javascript encryption aes


【解决方案1】:

对称

最简单的方法是使用库作为实现标准(在本例中为 AES)的库作为 Stanford Javascript Crypto Library,并在 C# 中使用相同的密码(通过 AesManagedAesCryptoServiceProvider)。

您将获得一个对称密码,但几乎只需要设置一个参数(密钥)才能让两个库正常工作。

不对称

您也可以改用非对称(公钥)密码。获得 javascript 代码的攻击者将能够向您的服务器发送精心设计的请求,但无法拦截其他请求。

有一个RSA in javascript 的实现,RSACryptoServiceProvider 类在.Net 中提供支持

full example is available in Code project 在 javascript lib 中包含一个到 RSA 的路径以支持填充(使用 .Net 实现时是必需的)

注意

这两种解决方案本身都容易被重放(攻击者截取一个字符串并稍后将其发送回 - 可能多次 - 到服务器)

【讨论】:

  • 我会看看这个,但这里的调查比我想要的要多。
  • 我肯定会使用非对称密码。使用对称密钥需要您将密钥发送给客户端,这意味着“窥探者”可以拦截该密钥并轻松解密所有来回流量(破坏目的)。
  • 这是有道理的,听起来像是我想做的事情.. 但是怎么做呢?我真的在这里寻找一些说明,而不是进一步调查的途径。不是因为我懒惰,而是因为我发现这个技巧很容易理解,而且我通过实践而不是阅读学得更好(即,我更像是一个“给我一条鱼”而不是“教我”的人钓鱼”——尤其是在时间限制生效的情况下,确实如此)
  • 我添加了一个包含示例代码的代码项目的链接来执行此操作(示例有点复杂,但使用 C# 和 javascript 之间的 RSA 密码)
  • 太好了,谢谢!我会审核代码项目并回复您。
猜你喜欢
  • 2012-07-29
  • 1970-01-01
  • 1970-01-01
  • 2016-12-25
  • 2018-10-31
  • 1970-01-01
  • 2010-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多