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

QMK*_*vin 17 javascript c# encryption aes

我之前已经看到过这个问题,但在这些情况下,海报想要在面向公众的网站上加密某些内容(通常是网址),而且回复主要是"不要!".然而,在我的情况下,JavaScript将存储在非公共内部系统中,所以我认为我有更多的余地.类似问题的一个例子是:如何在javascript中加密url并在c#中解密 - 并且答案实际上没有回答问题.

我的"JavaScript"实际上是"SuiteScript",其定义为"SuiteScript是一种基于JavaScript的API,可让开发人员扩展NetSuite",其中NetSuite是托管的CRM软件包,因此用于加密我的字符串的任何编码都将是隐藏给每个人,除了我公司的员工(因此被认为安全隐藏).

我想做的是:

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

我已经google了搜索stackoverflow,但没有发现任何文章或答案,提供了两种技术都可以使用的加密方法的明确说明.有人有这样的指示吗?

Jul*_*lia 19

对称

最简单的方法是使用库作为实现标准(在这种情况下为AES)的Stanford Javascript加密库,并在C#中使用相同的密码(通过AesManagedAesCryptoServiceProvider).

您将获得一个对称密码,但几乎不会有一个参数(密钥)设置为两个库工作.

不对称

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

还有的实现RSA在JavaScriptRSACryptoServiceProvider类提供的.Net支持

Code项目中提供了一个完整的示例,包括javascript lib中RSA的路径以支持填充(在使用.Net实现时是必需的)

注意

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