第一次写博客.

最近想做一个Web的自动登录,用户名和密码是RSA加密过的,后台是用的JAVA,我只会点C#,抓包什么都搞定了(使用的是Fiddler),不过由于C#和RSA的加密方式不同,我搞了N天,都搞不定,中间问过很多人,愿意帮助的人不多,可能是我太菜了.就是为了得到个认证的cookie,我中间用过Webbrowser控件,让人自己登录,然后得到Cookie,不过感觉终究是个半成品.

然而,C#和Java中间的RSA互转,我遇到了2个问题,网上都是public key 转 public key ,可惜,我只有exponent,modulus,要用这2个生成新的public key ,学习过C的程序员,看Java代码都多少看懂一些,我看了很多Java代码生成public Key的,很多转换的,最后的生成的RSA加密数据,总是系统访问失败.我对RSA一知半解,而且中间很多 ToBase64 ,From Base64, ToHex,FromHex,Btye[],我又去看了下编码,可惜,基础太差,都是一知半解.我按照,网上的代码,来回转换,在生成,不过可惜还是系统访问失败.

我就想,什么是加密,只要他们中间几次编码的转换顺序和步骤,和我的不一样,我就走进了死胡同.我试着想通读JavaScript生成密文的文件,不过还是基础太差,中间有一些算法,和 BigInt 类型,很复杂,我想我可以看完,不过人家改几个代码,工作又白费了.最好的办法是运行他提供的JavaSrcipt 文件来生成密文.

我开始找C#运行JavaScript的办法,有2类,一个是使用 过时的 sciptcontrol ,2010年前的技术,而且64支持不好,都是坑啊.还有一种就是运行第三方类库.我使用VS2017 NuGet 输入Javascript 找到了 Javascript.Net,就是它了.

不过网上学习资料很少,而且登录他的官网,都是English,我这小学英语,真是有点吃不消啊,看不懂英文,我们百度,谷歌翻译,找到词条,进入文档,看代码.(http://javascriptdotnet.codeplex.com/documentation)

  class Program
{
public class SystemConsole
{
public SystemConsole() { } public void Print(string iString)
{
Console.WriteLine(iString);
}
} static void Main(string[] args)
{
// Initialize the context
using (JavascriptContext context = new JavascriptContext()) { // Setting the externals parameters of the context
context.SetParameter("console", new SystemConsole());
context.SetParameter("message", "Hello World !");
context.SetParameter("number", ); // Running the script
context.Run("var i; for (i = 0; i < 5; i++) console.Print(message + ' (' + i + ')'); number += i;"); // Getting a parameter
Console.WriteLine("number: " + context.GetParameter("number"));
}
}
}

是不是很强大,竟然可以和C#对象交互.

不过我想使用的是文件,不是字符串啊.继续看代码,不过代码很少,看了提问里面,找代码.有一个.

static void Main(string[] args)
{
string script = "function test(a,b){return a+b;} test('abc','def');"; try {
using (JavascriptContext context = new JavascriptContext()) {
string result = (string)context.Run(script, "test");
Console.WriteLine(result);
}
} catch (Exception ex) {
Console.WriteLine(ex.Message);
Console.WriteLine(ex.StackTrace);
}
}

这可以调用方法.太棒了,自己改下.找了半天发现,不支持直接调用文件.自己改下.

string script = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory+ @"..\..\js\Base64.js");
script += File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + @"..\..\js\security.js");
script += File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + @"..\..\js\base.js");
try
{
using (JavascriptContext context = new JavascriptContext())
{
//exponent,modulus,password,usercode
context.SetParameter("console", new SystemConsole());
context.SetParameter("exponent", "");
context.SetParameter("modulus", "89ded116f36bf4e6108f549379f0137661a432e64fa80ae13cf1d0bb9fc957d16ee69a44383e3e4d0195e58f700ee7b4b00fa08f73a0cf6fcb517e3a772a1d2cfc96d2aa4d1df8b1c3a09f7c4ad4c3e29d427b6f96269d3d15db9da9d63fd2fface9299d63f4f17c1fc2565efcbe64b84e2a029f0a60a889106c3287f6a0be07");
context.SetParameter("password", "coky");
context.SetParameter("usercode", "");
context.SetParameter("usercodeRSA","");
//context.SetParameter("window", null);
context.Run(script, "test");
Console.WriteLine("usercodeRSA : " + context.GetParameter("usercodeRSA"));
Console.WriteLine("passwordRSA : " + context.GetParameter("passwordRSA")); }
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.WriteLine(ex.StackTrace);
} Console.Read();

下面是Javascript文件,这个是我自己编写的,其他2个文件

Base64.js
security.js
我用字符串把他们串联起来.不过我觉得在最前面的,应该是依赖最小的,对Javascript具体语法不是很了解,不过我觉得这样保险.
var usercodeRSA
var passwordRSA
console.Print("base start");
function test(exponent,modulus,password,usercode)
{
console.Print("exponent:"+exponent);
console.Print("modulus:"+modulus);
console.Print("password:"+password);
console.Print("usercode:"+usercode);
console.Print("==============================================================");
RSAUtils.setMaxDigits(200);
var key = new RSAUtils.getKeyPair(exponent, '', modulus);
console.Print("Key:" + key);
console.Print("=============================================================="); var b64 = base64encode(password);
console.Print("password base64encode:" + b64);
console.Print("==============================================================");
var reversedPwd = b64.split("").reverse().join("");
console.Print("password base64encode reverse:" + reversedPwd);
console.Print("==============================================================");
passwordRSA = RSAUtils.encryptedString(key, reversedPwd);
console.Print("password RSAencry:" + passwordRSA);
console.Print("=============================================================="); b64 = base64encode(usercode);
console.Print("usercode base64encode:" + b64);
console.Print("==============================================================");
reversedPwd = b64.split("").reverse().join("");
console.Print("usercode base64encode reverse:" + reversedPwd);
console.Print("==============================================================");
usercodeRSA = RSAUtils.encryptedString(key, reversedPwd);
console.Print("usercode RSAencry:" + usercodeRSA);
console.Print("==============================================================");
}
test(exponent,modulus,password,usercode);

运行一下.

大功告成.第一次写,写的很一般.有看不懂,欢迎留言 或者QQ:2786771252

(原创)VS2017 C# 运行 Javasrcipt RSA 加密用户名登录 Java开发的服务器的更多相关文章

  1. 你真的了解字典(Dictionary)吗? C# Memory Cache 踩坑记录 .net 泛型 结构化CSS设计思维 WinForm POST上传与后台接收 高效实用的.NET开源项目 .net 笔试面试总结(3) .net 笔试面试总结(2) 依赖注入 C# RSA 加密 C#与Java AES 加密解密

    你真的了解字典(Dictionary)吗?   从一道亲身经历的面试题说起 半年前,我参加我现在所在公司的面试,面试官给了一道题,说有一个Y形的链表,知道起始节点,找出交叉节点.为了便于描述,我把上面 ...

  2. RSA加密&解密【Java&Scala】

    一.简介 RSA加密算法是一种非对称加密算法.在公开密钥加密和电子商业中RSA被广泛使用. RSA公开密钥密码体制.所谓公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解 ...

  3. RSA加密算法和SSH远程连接服务器

    服务器端与客户端的密钥系统不一样,称为非对称式密钥系统 RSA算法的基础是模运算x mod n,事实上: [(a mod n) + (b mod n)] mod n = (a+b) mod n [(a ...

  4. LoadRunner 12 模拟 RSA加密 登录的实现(JS)

    LR 12 中 web_js_run API 非常坑,只能调用一个 JS 文件:更坑的是,不能通用 一个JS调用另外一个JS:(可能有,但在网上找了N个国家,都没有找到!如有,还请朋友告之,谢谢.) ...

  5. IOS, Android, Java Web Rest : RSA 加密和解密问题

    IOS, Android, Java Web Rest :  RSA 加密和解密问题 一对公钥私钥可以使用 OpenSSL创建, 通常 1024位长度够了. 注意: 1. 公钥私钥是BASE64编码的 ...

  6. 安全篇-AES/RSA加密机制

    在服务器与终端设备进行HTTP通讯时,常常会被网络抓包.反编译(Android APK反编译工具)等技术得到HTTP通讯接口地址和参数.为了确保信息的安全,我们采用AES+RSA组合的方式进行接口参数 ...

  7. Java开发和运行环境的搭建

    Java开发需要准备的东西? JDK+Eclipse 其中JDK的意思是Java开发工具包,Eclipse是进行用于做Java程序开发的工具(当然你也可以用记事本什么的去做). 其他开发工具:JCre ...

  8. RSA加密和数字签名在Java中常见应用【原创】

    相关术语解释: RSA,参考: https://en.wikipedia.org/wiki/RSA_(cryptosystem) 非对称加密算法 ,参考:https://baike.baidu.com ...

  9. IdentityServer4之JWT签名(RSA加密证书)及验签

    一.前言 在IdentityServer4中有两种令牌,一个是JWT和Reference Token,在IDS4中默认用的是JWT,那么这两者有什么区别呢? 二.JWT与Reference Token ...

随机推荐

  1. 小程序(Wepy)--生成海报图片

    对于小程序的分享, 除了分享给朋友, 好友群,是可以直接做到的, 但是要想扩大推广范围, 通过生成海报图片, 将自己小程序码带进去,应该是目前我所知的好办法了. 但是海报也不是那么好搞.之前自己手写出 ...

  2. java方法名的重载

    方法的重载:方法名相同,参数不同,按照参数类型进行匹配 创建一个Simple 类,然后定义了两个方法 package cuteSnow; public class Simple { // 方法的重载, ...

  3. POI 详细介绍

    Apache POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目.目前POI已经有了Ruby版本. 结构: HSSF - 提供读写Microsoft Excel XLS格式 ...

  4. nutch如何修改regex-urlfilter.txt爬取符合条件的链接

    例如我在爬取学生在线的时候,发现爬取不到特定的通知,例如<中粮福临门助学基金申请公告>,通过分析发现原来通知的链接被过滤掉了,下面对过滤url的配置文件regex-urlfilter.tx ...

  5. WinServer-IIS-js无法加载问题

    IIS中无法加载JS文件错误 尝试下面的几种解决方法,一起用

  6. POJ——T2421 Constructing Roads

    http://poj.org/problem?id=2421 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 24132   ...

  7. ios中NSUserDefaults的使用方法

    ios中NSUserDefaults的使用方法 NSUserDefaults类提供了一个与默认系统进行交互的编程接口.NSUserDefaults对象是用来保存.恢复应用程序相关的偏好设置,配置数据等 ...

  8. Remove Duplicates from Sorted List II 解答(有个比較特殊的case leetcode OJ没有覆盖)

    昨天被考了一道数据结构题,当时的实现比較一般.回来翻看leetcode,果然是上面的题.遂解之. accept之后翻看discuss别人的解法.发现非常多能够accept的代码都过不了我设计的一个ca ...

  9. 【Oracle学习笔记】

    内容主要包括: (1)三种循环及其简化 (2)游标的使用 (3)异常处理 (4)存储过程 (5)存储函数 (6)触发器 (7)其它pl/sql操作 ---------------loop循环定义变量- ...

  10. Cocos2d-x可以实现的动画效果

    动作(Actions)move移动:moveto/moveby 从一个位置移动到另外一个位置 从一个位置移动多少数量级rotate旋转:rotateto/rotateby 从一个角度旋转到另外一个角度 ...