首页 » 其他语言 » C# » (.net)C#特殊情况下利用指数与模数来实现RSA加密。

(.net)C#特殊情况下利用指数与模数来实现RSA加密。

 

一个需求:

    服务返回了指数"010001"和模数"128位长度的字符串",前台C#需要用这两个数据进行RSA加密.

首先想到的是百度找C#的RSA加密,试了网上好多种方式,生成的RSA加密都不能对应上JAVA后台密码。

前端小哥他的网页端可以使用security-new.js来解决。便产生了C#调用security-new.js的方式来实现RSA加密。


一、C#JS调用库

C#有多种方式可以调用到JS的方法。

1.使用WebBrowser

2.使用Jint.dll

3.使用Noesis.Javascript.dll

另外说一下,Jint和Noesis.Javascript的不同之处。

Jint:一个dll能够同时兼容32位,没有多余的dll需要引用,JS执行速度慢。

Noesis.Javascript:.net 4.0版本需要区分x86和x64系统,JS执行速度快。


二、C# RSA加密过程

Noesis.Javascript为例来操作security-new.js解决RSA加密的问题。

不能直接使用security-new.js来加密,因为security的内容需要windows属性,而这个属性是浏览器属性,无法使用,需要来更改一番,我已经改好了直接下载就行了。

security-new.js下载地址:https://download.csdn.net/download/a11483314/10549374


三、引入Noesis.Javascript

右键解决方案-Nuget-搜索Noesis.Javascript

需要把msvcp100.dllmsvcr100.dll放到Bin目录中(Noesis.Javascript在哪,这俩就放到哪)。区分64位和32位系统。


四、实现过程

public void getPw(object arg, RoutedEventArgs arg1)
{
   string path = AppDomain.CurrentDomain.BaseDirectory + @"files\security-new.js";
   StreamReader sr = new StreamReader(path, Encoding.Default);
   string content = sr.ReadToEnd();
   using (JavascriptContext context = new JavascriptContext())
   {
   context.SetParameter("jpwd", "");
   context.Run(content + @"getPassWord();");
   MessageBox.Show("jpwd: " + context.GetParameter("jpwd"));
   }
}

生成好了的加密码,传到后台就行了。

security中最重要的代码:

function getPassWord() {
var key = new RSAUtils.getKeyPair("指数","","模数");
jpwd = RSAUtils.encryptedString(key, "密码");
};

security当中的这三个值替换成你自己的指数,模数,和明文密码。

五、关于JINT

引用JINT.dll,引入方式可以通过Nuget也可以百度找它的dll文件手动引入。

var engine = new Engine().SetValue("toast", new Action<object>(toast));
engine.Execute(content + @"getPassWord();").GetCompletionValue();
public void toast(object pw)
{
   MessageBox.Show(pw.ToString());
}

security中的getPassWord()改成如下:

function getPassWord() {
var key = new RSAUtils.getKeyPair("指数","","模数");
var jpwd = RSAUtils.encryptedString(key, "密码");
toast(jpwd );
};

原文链接:(.net)C#特殊情况下利用指数与模数来实现RSA加密。,转载请注明来源!

1