如何在JavaScript中加密字符串并在c#中解密该字符串?

本文关键字:字符串 解密 串并 字符 JavaScript 加密 | 更新日期: 2023-09-27 18:03:26

我以前见过这个问题,不过在这些情况下,发布者想要在面向公众的网站上加密某些东西(通常是url),而回答大多是"不要!"。然而,在我的例子中,JavaScript将存储在一个非公共的内部系统中,所以我认为我有更多的余地。类似问题的一个例子是:如何在javascript中加密url,在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,但没有找到任何文章或答案,提供了一种可以被两种技术使用的加密方法的明确说明。有人有这样的指示吗?

如何在JavaScript中加密字符串并在c#中解密该字符串?

对称

最简单的方法是使用一个库作为斯坦福Javascript加密库实现一个标准(在这种情况下是AES),并在c#中使用相同的密码(通过AesManagedAesCryptoServiceProvider)。

你会得到一个对称的密码,但几乎没有超过一个参数(密钥)来设置两个库的工作。

不对称

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

在javascript中有一个RSA的实现,RSACryptoServiceProvider类在。net中提供了支持

Code项目中有一个完整的示例,包括javascript库中RSA的路径,以支持填充(使用。net实现时必须)

注意

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