第一次写博客.

最近想做一个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 contextusing (JavascriptContext context = new JavascriptContext()) {// Setting the externals parameters of the contextcontext.SetParameter("console", new SystemConsole());context.SetParameter("message", "Hello World !");context.SetParameter("number", 1);// Running the scriptcontext.Run("var i; for (i = 0; i < 5; i++) console.Print(message + ' (' + i + ')'); number += i;");// Getting a parameterConsole.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,usercodecontext.SetParameter("console", new SystemConsole());context.SetParameter("exponent", "10001");context.SetParameter("modulus", "89ded116f36bf4e6108f549379f0137661a432e64fa80ae13cf1d0bb9fc957d16ee69a44383e3e4d0195e58f700ee7b4b00fa08f73a0cf6fcb517e3a772a1d2cfc96d2aa4d1df8b1c3a09f7c4ad4c3e29d427b6f96269d3d15db9da9d63fd2fface9299d63f4f17c1fc2565efcbe64b84e2a029f0a60a889106c3287f6a0be07");context.SetParameter("password", "coky");context.SetParameter("usercode", "1234");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

转载于:https://www.cnblogs.com/coky/p/6765405.html

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

  1. java python rsa加密_实现Java加密,Python解密的RSA非对称加密算法功能

    摘要 因为最近业务需要使用到openssl的rsa非对称加密算法,研究了下它的使用方式,但是特殊在于前端分IOS和android两端,所以前端部门要求使用java给他们做一个加密工具包,但是因为服务端 ...

  2. RSA加密与解密(Java实现)

    本文作者:合肥工业大学 管理学院 钱洋 email:1563178220@qq.com 内容可能有不到之处,欢迎交流. 未经本人允许禁止转载. RSA的应用 RSA是一种非对称加密算法.现在,很多登陆 ...

  3. 非对称算法之一RSA加密解密的java demo

    RSA加密算法,著名的非对称加密算法之一. 1,私钥加密,公钥解密例子(通常用在数字证书签名上). package rsa;import org.apache.commons.codec.binary ...

  4. jsp使用rsa加密服务端Java解密

    jsp 需要引入 jsencrypt.js 网站:https://www.bootcdn.cn/jsencrypt/ 可以进行获取下载 jsp代码 // 这里是从服务端获取的公钥 var public ...

  5. Java开发和运行环境的搭建(详细教程)

    对JDK.JRE.Java 的认识 JDK 是Java Development Kit的缩写,即Java开发工具集.JDK是整个Java的核心,包括了Java运行环境(JRE).Java开发工具和Ja ...

  6. RSA加密web前端用户名密码加密传输至后台并解密

    RSA加密web前端用户名密码加密传输至后台并解密 编写加解密公共方法类RSAUtils import org.apache.commons.codec.binary.Base64; import j ...

  7. 原创|RSA加密详解,京东登录页面都在用加密有什么好?

    前言 在以前的一个项目中,觉得登录注册的加密方式不安全,需要改造一下,就用到了RSA加密.网上都说它是最安全的,现有的技术是无法破解的.我知道的京东的登录和国寿的登录都是用的这个加密.我想整理一下,肯 ...

  8. python判断网页密码加密方式_python实现网页登录时的rsa加密流程

    对某些网站的登录包进行抓包时发现,客户端对用户名进行了加密,然后传给服务器进行校验. 使用chrome调试功能断点调试,发现网站用javascript对用户名做了rsa加密. 为了实现网站的自动登录, ...

  9. python实现网页登录时的rsa加密流程

    对某些网站的登录包进行抓包时发现,客户端对用户名进行了加密,然后传给服务器进行校验. 使用chrome调试功能断点调试,发现网站用javascript对用户名做了rsa加密. 为了实现网站的自动登录, ...

最新文章

  1. 多目标跟踪2021总结
  2. rocketmq 消息指定_详解RocketMQ不同类型的消费者
  3. c mysql转sqlite_SqliteToMysql
  4. Oracle中如何查询一个表的所有字段名和数据类型
  5. 浅谈Tarjan缩点(分析+模板)
  6. __gnu_cxx::hash_map使用中的一些问题
  7. 帆软finereport决策系统自定义登录界面
  8. 文档布局分析 扭曲文档图像恢复
  9. 2.10 环境变量PATH 2.11 cp命令 2.12 mv命令 2.13 文档查看cat/mor
  10. 超好用的文件转换神器!拿走不谢~
  11. Python科学计算——Numpy知识点
  12. TCPMP之旅(一) TCPMP整体软体框架
  13. ospf学习-----LSA类型以及stub、nssa区域
  14. 笔记本电脑禁用/启用自带键盘
  15. java开发季度绩效自评,季度绩效考核英文自我评价
  16. Flutter—— 仿自如APP裸眼3D效果
  17. 生产订单的计划、实际成本与产出查看
  18. Java 上机----实训操作14----学校录取类
  19. 自定义报表是这样实现的
  20. 微信小程序斗地主完整代码及步骤

热门文章

  1. Apollo配置灰度发布
  2. Elasticsearch的智能判断:动态添加数据映射
  3. Python3 编程示例:斐波纳契数列
  4. 请回答一下Java中有几种线程池及实现过程?
  5. MySQL行转列完整SQL示例
  6. sqserver对比oracle的区别,oracle和sqlserver比较
  7. 大工20春《计算机文化基础》在线测试3,大工20春《计算机文化基础》在线测试3题目【标准答案】...
  8. 1.2.4 计算机的工作过程(从源程序到可执行文件、指令执行过程的描述)
  9. Visual Studio Code (VSCode) 之 C/C++ 调试配置详解
  10. 普华基础软件笔试_普华“2018上海市软件和集成电路产业发展专项资金项目”成功验收...