这个程序是为我的计算机信息安全课程设计而编写的,实现了基于RSA算法的文本加密功能。
本程序只用于演示,没有实用价值,主要原因是Javascript运算速度太慢,以至于我选用的质数只能小于10000,太大了,生成的密钥也会很大,对加密的时间有着直接影响。
钥匙是程序自动选取两个质数以后,计算得到的,最终的格式如下,数1,数2,其中数2是N,数1是E或者是D,一般,我们把含有E的钥匙叫公钥,含有D的钥匙叫做私钥,当然,如果你想倒过来也没关系~至于E,D,N是什么东东,您查阅一下RSA的资料,看一下计算方法就知道了~
钥匙中的数1的大小和加密或解密的时间成正比,如果你的钥匙用于加密,那么数1越大,加密所需时间也就越长。我测试了一下,选取的数1不应该超过2000,否则要等很长时间(至少能让你失去耐心),其次,要加密的文本也不要太长,建议5个字母以内(所以说没有实用价值 :P)。在加密或解密的时候,浏览器会经常询问您是否终止Javascript的运行,你只有选择继续运行,才能完成整个加密过程。
我们学校这学期开了计算机信息安全这门课,更像是科普讲座,介绍了一些常用的加密算法,对称加密,非对称加密,数字签名等等,还有防火墙,病毒防范等,给我们上课的老师叫胡春光,我很喜欢他,他知识渊博,上课语速平和,说话很有逻辑性,能用很通俗易懂的方式为我们讲课,引人入胜,而且他是个很有个性的老师,能成为他的学生真是三生有幸~
好了,以下是程序的源代码,供大家学习参考,程序没有经过优化,质量不算高,欢迎大家提出宝贵意见。
P.S:
1:程序使用了mootools框架进行开发,其实就是用mootools的方法来定义类创建对象~没有用其他的特性~
2:密钥产生页面:Keygen.htm,加密页面:encrypt.htm,解密页面:decrypt.htm
CoffeeCat
2007-12-30
http://www.cnitblog.com/Files/CoffeeCat/rsa/RSA.rar
今天我在编写RSA加密算法的程序,其中,有一个原理性的式子有点看不明白:a=b(mod
c)。于是,我和黄臻开始讨论,然后,黄臻发现,这个叫同余式,表示a除以c的余数是b。
于是,我提出了一个问题,如果a和c的余数是1,那么能不能证明a和c是互质的?。然后,我和黄臻开始了有趣的思考。我尝试着证明几次,都很搞笑的回到了命题本身,最后,黄臻通过反证法,把这个问题解出来了,然后和我说了3遍,才把我说服,呵呵,当时,我和他的思维处于两条平行线上,所以我们的一些对话特别搞笑,当时我们自己都笑翻了~~比如我试图推翻他的结论,于是我开始举反例,举了半天没举出来,后来发现,我如果能举出反例,我也就能推翻我的命题,不需要证明了~~
根据黄臻的反证法,我们总算得出了结论:如果a和c的余数是1,那么a和c就互质了~
然后我继续写程序~写程序的时候,我想起来我程序中用到了欧几里德算法来求最大公约数,就是用除数除以被除数,如果求得的余数不为0,则将被除数作为新的除数,余数作为新的被除数,重复刚才的步骤。如果求得的余数等于0了,那么最后一次的被除数就是两个数的最大公因数。比如,求15和6的公约数,先得到15除以6的余数3,然后得到6和3的余数0,由此得到15和6的最大公因数是3。那我只要求一下a和c的最大公约数不就行了~
于是,我用欧几里德算法来求a和c的最大公约数,由题目可知,a除以c的余数是1,c除以1的余数肯定是0,所以,a和c的最大公因数也就是1,也就是a和c是互质的~
一个反证,一个正证,两种不同的思路,两种不同的方法,却能得到相同的结论~一个简单的命题,可以很简单的证明了,也可能绕了很大圈子也没证明出来~数学真是奇妙啊~
看到盛大的录取通知,心中很是激动,感谢盛大选择了我,感谢盛大认可我的能力,看到我的潜力,我一定要努力工作,回报盛大,早日成为盛大优秀的一员~
能为盛大效力,我感到很知足,也很幸运~现在我很期盼能早点去公司实习,呵呵,早日融入公司~
下个星期我先要准备学校的考试,等到考试结束以后,我打算深入研究一下C++网络编程~不过我不会放弃我喜欢的Javascript,呵呵。上个月我在做盛大富翁的网页版,这是一个基于浏览器的Demo网游,模仿盛大富翁,效果还可以,等到有时间我会继续完善它~~
最后我还要感谢所有支持我的朋友们,还有51Job.com
最近我忙碌于08校园招聘,所以有段时间没有写博客了,还望大家见谅。
我投了3家比较钟情的互联网公司,分别是盛大,腾讯和淘宝,都获得了笔试机会,其中,盛大和腾讯的笔试顺利通过,不过由于缺乏经验,在面试的环节做的不理想。
第一次面试是去腾讯,专业问题回答的很好,主要是C语言和数据结构,不过有关职业规划之类的问题,没有回答好,主要原因是自己没有很好的准备,第1次也紧张,最后就被BS了。
第二次面试是去盛大,盛大的面试安排在公司内,他们公司真的很nice,不过,盛大这次面向应届生的研发类的岗位只有游戏研发,要求具有C++、TCP/IP协议之类的知识。虽然我C++的基础打的很好,可以通过笔试,但毕竟我没有C++的开发经验,面试的时候,考官问了些比较有深度的C++知识,还有网络协议,操作系统原理之类的问题,我都没答上来。虽然现在还没来通知,但我觉得我通过的概率不大。不过,我挺希望他们能看到我在Web开发方面的能力,以及在编程方面的潜力,毕竟,作为一名编程基础扎实的本科生,我的可塑性高,潜力大,相比硕士生,我更加年轻,嘿嘿~祝福自己吧~
淘宝的笔试让我有点失望,第一,人太多,估计足有400人参加。第二,卷子比较简单,特别是编程题,我觉得人人都应该会做,这样优秀的人不能脱颖而出。第三,也是最夸张的,就是他们卷子批的太快。下午4点考完,晚上就会给通知,第二天就安排面试。最后,我没有得到通知,被BS了,可以说在意料之外(笔试前),也在意料之中(笔试后)...
现在,我的目标是盛大的Web开发工程师岗位,毕竟,Web开发是我最最熟悉,也是我最喜欢,最擅长的,而且,盛大也是我很喜欢的互联网公司。
加油!~同时,我也祝那些和我一样即将就业的同学们,一切顺利!
Ferris
2007-12-1
前天晚上,我的朋友告诉我说,郑老师去世了。我很震惊,也很伤心。郑老师很年轻,刚刚结婚,正在事业刚刚稳定下来,正要蓬勃发展的时候,就这样离去了,让人觉得好惋惜,郑老师人很好,和蔼可亲,对学生就像是朋友,在教学上她也很严谨,一丝不苟。
也是在前天晚上,我接到院里的通知,希望我做一个哀悼郑老师的网站。我义不容辞。我希望把这个网站做的漂亮点,做的大气点,祝她一路走好。
过往的朋友请去鲜朵花吧,谢谢
http://jxxy.web.shiep.edu.cn/zhengyang07/
最近在开发一个Javascript应用程序,我以DOM方法为首选,以兼容Firefox和IE浏览器为原则,在Firefox和IE下进行编写调试,不过遇到很多我哭笑不得的代码,符合W3C标准,却在IE下显示不正常,让我由衷感叹,IE的Javascript支持做的真是差,更让我觉得有点好笑的是,现在好多网站都支持IE却不支持Firefox,特别是国内网站。
现在,我把这些问题代码罗列在这里,希望以后能找到解决方法或替代方法。
1:奇怪的iframe边框 问题:用DOM方法创建的iframe在IE下竟然不能将边框设为0
问题浏览器:IE
代码:
1 <div id="testdiv"></div>
2 <script language="javascript">
3 var iframe = document.createElement("iframe");
4 iframe.setAttribute("id","f1");
5 iframe.setAttribute("name","f1");
6 iframe.setAttribute("width","100");
7 iframe.setAttribute("height","100");
8 iframe.setAttribute("frameBorder","0");
9 document.getElementById("testdiv").appendChild(iframe);
10 </script>
解决方法:用div代替iframe,设置div的CSS的overflow属性
2:script节点不能appendChild(TextNode)
问题:我用DOM方法创建的script标签下竟然不能appendChild(TextNode)
问题浏览器:IE
代码:
var s = document.createElement("script");
s.setAttribute("language","javascript");
s.setAttribute("type","text/javascript");
document.getElementsByTagName("body")[0].appendChild(s);
s.appendChild( document.createTextNode("alert('hello')");
解决方法:用document.write将script的内容写入网页
继续更新...
Ferris (CoffeeCat)
2007-11-11
今天在写一个小程序,遇到一个小问题,就是我想用setInterval函数定时调用某一个函数,而这个函数,又恰好是我的一个类的成员函数。最初,我是这样写的:
function ClassA()
{
this.i = 0;
this.start = function()
{
setInterval(this.callback,5000);
}
this.callback = function()
{
this.i++;
//alert(this);
}
}
var a = new ClassA();
a.start();
这段代码的目的,是希望让ClassA类中的成员函数callback,每隔5秒被调用一次,从而能让ClassA中的属性i自增。
但是,运行这段代码以后,我们发现,浏览器提示this.i不存在。为什么会出现这样的问题呢?我们在this.i++;下面加上alert语句,看看this到底是什么。结果显示,this是一个Object Window。而不是我们希望的对象a。为什么会这样呢?因为setInterval是一个Window类的成员函数,所以回调函数也从属于Window类了。
那如何解决这个问题呢?请看下面的代码:
function ClassA()
{
this.i = 0;
this.start = function()
{
var _this = this;
var callback = function(){ _this.callBack(); };
window.setInterval(callback,5000);
}
this.callback = function()
{
this.i++;
}
}
var a = new ClassA();
a.start();
在start成员函数中,我们用_this保存了ClassA的this,然后,定义了一个内部匿名函数,这个函数用于setInterval的回调,而在这个匿名函数中,通过_this来调用callBack,这样,就可以保证在调用callback函数时,this指针不是Window,而是对象a,大家可以细细的品味一下其中的奥秘~~
Ferris Xu (CoffeeCat)
2007-10-20
今天我写了一个比较简单的CrackMe程序,程序用VC编写,并参照了看雪论坛riijj的源代码。大家有兴趣可以尝试破解一下。
程序大小152KB,没有加壳,在提交注册码以后会有相应的提示,因此,希望大家不要使用暴力破解。
此CrackMe的注册码还是比较容易找到的,算法并不复杂,不过,要写出注册机很难,高手可以尝试一下,如果需要此CrackMe的源代码,可以联系我或回复此文。
下载地址:
Release版
http://www.cnitblog.com/Files/CoffeeCat/crackme/crackme_Release.rarDebug版
http://www.cnitblog.com/Files/CoffeeCat/crackme/crackme.rar
众所周知,病毒就是一个恶意的程序,中病毒其实就是运行了恶意的程序,从而产生了恶意的结果,使得电脑出现不正常的现象,进而造成数据丢失,帐号被盗,甚至是计算机参数被修改导致计算机硬件出现问题。
99%的病毒是通过以下两种方法运行起来的:
1:通过IE浏览器的漏洞,利用Javascript代码远程下载病毒文件后,再利用Javascript创建ShellExec来运行病毒。
2:在硬盘、磁盘的分区下创建autorun(自动运行),当用户双击打开分区时,系统便会自动运行程序。
对于第1种情况,很好解决,我们只要使用Firefox或Opera上网即可,当然,为了让系统更加安全,安装IE7以升级IE的内核还是很有必要的。
下面着重讲第2种情况的主动防御方法:
一:关闭Autorun功能:
当你插入U盘或者放入光盘的时候,系统会自动扫描U盘,并执行默认的程序,当你双击打开某个盘的时候,系统也会先自动运行某个程序。如果这个程序是木马,那就糟了,所以,我们要关闭autorun功能,达到主动防御的目的。
1:开始->运行->gpedit.msc,打开组策略
2:选择左边的 管理模版->系统
3:双击右边的 关闭自动播放
4:弹出的对话框中选择 启用,下面选择 所有设备,点击确定。
这样,当你插入U盘或者放入光盘以后,程序就不会自动运行了。
二:关闭Shell Hardware Detection服务 笔者使用的是英文操作系统,但是,有一次我对D盘点右键,却发现用中文写的“打开”和“资源管理器”选项。其实,这两个选项是由病毒生成的,目的是诱惑我们点击。当我们点击了这两个选项,立刻就中毒。虽然笔者使用的是英文操作系统,但是有时操作太快,很容易误操作,更何况是使用中文操作系统的朋友们,所以,我们要关闭Shell Hardware Detection服务。
1:开始->运行->services.msc,打开服务
2:双击右边的 Shell Hardware Detection,在服务类型中选择 已禁用。点击确定即可。
经过了上面的两次设置,现在病毒就不会自动运行了,我们可以放心的使用右键菜单,双击打开硬盘了。从某种意义上来说,我们已经主动防御了auto病毒。不过由于auto病毒一般都是隐藏的系统文件,所以,我们最好在文件夹选项里设置一下,让系统显示出所有文件,然后把auto病毒删除了,彻底清除auto病毒。一般的auto病毒由两个文件组成:autorun.inf和一个exe文件,至于是哪个exe文件,你可以用记事本打开autorun.inf看,这里面有写。
另外推荐来自
Achou一篇文章,他简单而深入谈了一下autorun的运作,以及在注册表中禁止自动运行的方法,写的蛮好的:
《禁止系统在双击盘符时自动运行autorun.inf》
http://www.cnitblog.com/chouyaguang/archive/2007/10/17/34985.html
Ferris Xu (CoffeeCat)
2007-10-17
我一直使用Firefox上网,但是,最近auto病毒特别猖獗,而且防范很难。auto病毒是通过IE7以前版本的漏洞入侵的,所以,我强烈提醒大家一定要把浏览器升级到IE7.0,虽然我不推荐您使用IE7上网,但是对于防范病毒,安装IE7还是很有必要的。
首先,我先讲一下对付auto病毒的必要措施
1:关闭autorun功能 1:开始->运行->输入gpedit.msc
2:左边选择 管理模版-〉系统
3:右边双击 关闭自动播放
4:选择 已启用,所有驱动器
2:安装IE7 http://www.skycn.com/soft/30276.html
下面,我简单讲一下auto病毒。我第一次发现auto病毒是因为舞街区。因为我每次玩舞街区都会中auto病毒,所以,在十一长假的时候,我对舞街区程序做了详细的病毒测试与分析,最终发现auto病毒是通过舞街区程序中附加的网页入侵我们电脑的,它下载一段加密的、有害的Javascript程序,利用IE的漏洞在我们电脑上生成木马病毒。而这段JS程序,正是著名的网页计数器服务商itsun的代码。itsun服务器被挂马。由于Javascript加过密,所以,在入侵的时候,杀毒软件是查不出来的。具体的技术报告可以参见
http://www.cnitblog.com/CoffeeCat/archive/2007/10/06/34427.html
这几天,我发现不光是舞街区,连PPStream,PPLive等著名软件都有这个问题,原因是这些程序中都加载了网页,而这些网页都调用了itsun的计数器。现在,在程序中嵌入网页是一个很时髦的做法,因为那样可以丰富应用程序的界面,丰富与用户的交互。然而,一般而言,在Windows程序里嵌入网页,都是使用IE的内核技术,所以,IE的漏洞同样会成为这些程序的漏洞。
所以,我们唯一能做的,就是升级IE内核,把IE升级到IE7,可以有效杜绝被感染auto病毒。
在感染了auto病毒以后,病毒会感染用户电脑里的网页文件。我过段时间会专门写一个程序,为大家清除被感染的网页中的病毒。