欢迎访问 生活随笔!

ag凯发k8国际

当前位置: ag凯发k8国际 > 编程语言 > c# >内容正文

c#

(原创)vs2017 c# 运行 javasrcipt rsa 加密用户名登录 java开发的服务器 -ag凯发k8国际

发布时间:2024/10/12 c# 25 豆豆
ag凯发k8国际 收集整理的这篇文章主要介绍了 (原创)vs2017 c# 运行 javasrcipt rsa 加密用户名登录 java开发的服务器 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

第一次写博客.

     最近想做一个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,就是它了.

  不过网上学习资料很少,而且登录他的ag凯发k8国际官网,都是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

总结

以上是ag凯发k8国际为你收集整理的(原创)vs2017 c# 运行 javasrcipt rsa 加密用户名登录 java开发的服务器的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得ag凯发k8国际网站内容还不错,欢迎将ag凯发k8国际推荐给好友。

网站地图