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

我以前问过这个问题,虽然在这些情况下,海报想在公共面对网站上加密某些东西(通常是一个url),而这些回答主要是“不要!”.然而,在我的情况下,JavaScript将被存储在非公有内部系统中,所以我认为我有更多的余地.类似问题的一个例子是:How to encrypt url in javascript and decrypt in c# – 答案并不实际回答这个问题.

我的’JavaScript’实际上是“SuiteScript”,它被定义为“SuiteScript是一个基于JavaScript的API,允许开发人员扩展NetSuite”,其中NetSuite是托管的CRM软件包,因此用于加密我的字符串的任何编码都将是隐藏到所有人,除了我公司的员工(所以认为安全隐藏).

我想做的是:

>生成查询字符串(例如userid = guidValue& firstName = stringValue& company = stringValue& …),
>使用安全方法(如AES256,RSA,无论任何人可以建议安全)进行加密,
>在我的基于C#的网站上调用一个网页,通过URL中的这个字符串(例如mysite.com/mypage.aspx?encStr=encryptedString)
>将C#页面解密,分离名称/值对并进行处理.

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

最佳答案
对称

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

你会得到一个对称的密码,但是几乎没有多个参数(关键字)设置为两个lib都可以使用.

不对称

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

RSA in javascript的实现和RSACryptoServiceProvider类在.Net中提供支持

一个full example is available in Code project,包括一个路径到Java中的RSA,以支持填充(强制使用.Net实现)

注意

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

转载注明原文:如何加密JavaScript中的字符串并解密该字符串在C# - 代码日志