有高手知道下面的加密程序的原理吗?

Johnny_de 2005-08-15 01:06:10
Public Function EnDeCrypt(ByVal Text As String, ByVal Key As String, Encrypt As Boolean)
Dim lngLength As Long
Dim lngSALTLen As Long
Dim lngReturnValue As Long
hSessionKey = 0
lngSALTLen = 0
KeyFromPW Key 'Passwort in Key umwandeln
If Encrypt Then
lngReturnValue = CryptGetKeyParam(hSessionKey, KP_SALT, vbNull, lngSALTLen, 0) 'String mit Verschlüsselungsspezifikationen

strSALT = String(lngSALTLen + 1, vbNullChar)
'lngReturnValue = CryptGenRandom(hCryptProv, lngSALTLen, strSALT)


'If lngReturnValue = 0 Then err.Raise err.LastDllError, , "Dll gab Fehler aus. SALT konnte nicht berechnet werden!"
Else
'strSALT = String(lngSALTLen + 1, "a")
End If
lngReturnValue = CryptSetKeyParam(hSessionKey, KP_SALT, strSALT, 0) ' strSALT setzen
If lngReturnValue = 0 Then Err.Raise Err.LastDllError, , "DLL-Fehler: Konnte SALT nicht setzen."

lngLength = Len(Text)
If Encrypt Then 'Verschlüsseln
lngReturnValue = CryptEncrypt(hSessionKey, 0, 1, 0, Text, lngLength, lngLength)
If lngReturnValue = 0 Then Err.Raise Err.LastDllError, , "Fehler während des Encrypt-Vorgangs."
Else 'Entschlüsseln
lngReturnValue = CryptDecrypt(hSessionKey, 0, 1, 0, Text, lngLength)
If lngReturnValue = 0 Then Err.Raise Err.LastDllError, , "Fehler während des Decrypt-Vorgangs."
End If


EnDeCrypt = Left$(Text, lngLength)


If hSessionKey <> 0 Then CryptDestroyKey hSessionKey 'Key zerstören
End Function
...全文
154 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
rainstormmaster 2005-11-04
  • 打赏
  • 举报
回复
问题解决了吗?
northwolves 2005-11-04
  • 打赏
  • 举报
回复
http://www.boardy.de/showthread.php3?threadid=34332635
tokyfeng228 2005-11-04
  • 打赏
  • 举报
回复
云,什么啊
Johnny_de 2005-11-03
  • 打赏
  • 举报
回复
大家进来领分。
早就知道C#是.net平台最好的编程语言,以简洁高效著称,但是一直没有去尝试,今天终于打开VisualStudio来一睹C#的风采,不试不知道,原来C#这么好用! 原来总以为C#有些难学,但是上手才发现,原来一切是如此简单,如果你之前非常熟悉VC和Java的编程方法,那么,C#入门不用半个小时。 熟悉VC使你可以更快的适应Visual C#的开发环境,毕竟都是微软自家的东西,而熟悉Java你可以对C#语言快速上手,因为C#和Java是非常相似的!我很庆幸自己之前已经比较熟练的使用VC和Java了,整个C#入门用了不到半个小时,而从初次接触C#到开发这个QQ自动登录器也只用了短短的几个小时,下面,我就给大家讲讲如何用C#开发一个QQ自动登录器,让大家真正体会到C#的强大魅力! 现在拥有QQ的人已经很多了,而且不少人同时拥有几个账号,遗憾的是QQ只能设置一个号码自动登录,如果想同时登录几个账号那么必须一个一个手动输入,因此,网上也出现了不少QQ自动登录器,这究竟是怎么实现的呢?其实原理非常简单。 QQ是支持命令行登录的,也就是说QQ的exe程序支持参数,下面举一个参数登录的例子: e:\qq\qq.exe /START QQUIN:00000000 PWDHASH:4QrcORm6Wau+VuBX9g+IPg== /STAT:41 比如有上面这个参数,前面的e:\qq\qq.exe是QQ的程序路径,/START QQUIN:是保留字段,后面紧跟的就是需要登录的QQ号码,PWDHASH:是保留字段,后面紧跟的是该QQ号码的密码,不过这个密码是加密的,我们等下再说,/STAT:41是表示登录状态,其中41表示正常登录,而40表示隐身,目前一直到QQ2009好像只支持这两个状态,不支持其他诸如忙碌,静音,离开等状态,有了这个参数,我们实现自动登录就方便多了! 这个参数里面其他都好说,唯独这个加密的密码我们不好处理,因为我们必须把密码转换为加密方式,其实,QQ密码的加密方式也是非常简单的,先用MD5的HASH进行一次加密,然后把结果再用一次Base64加密即可得到这个加密字符串,有了这个信息,我们剩下的就好办多了! 很幸运的是用C#处理这个加密非常简单,有个Convert.ToBase64String(byte[])可以直接进行base64加密,而System.Security.Cryptography这个系统类里有md5.ComputeHash这个方法直接可以进行Hash加密,所以,密码的加密也就变得很简单了,下面对这部分代码进行一个详细的说明: 首先引用系统类 using System.Security.Cryptography; 然后在任意一个按钮事件中写下如下代码: MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); byte[] pass=Encoding.Default.GetBytes("要加密的QQ密码"); string command = " /START QQUIN:" + "00000000"+ " PWDHASH:" + Convert.ToBase64String(md5.ComputeHash(pass)) + " /STAT:" + "41"; 这样短短的3行代码就构造得到了QQ的登录参数command变量,剩下的只要用System.Diagnostics.Process.Start这个方法去运行这个带参数的QQ.exe就可以了! 我自己写了这个QQ自动登录的程序,比较简单,当然程序中我没用Convert.ToBase64String这个方法去用Base64加密,而是自己写了Base64的加密方法,主要是为了熟悉一下C#类的使用,另外,程序中还用到了一些基本控件,比如timer,openfiledialog,listview等,适合初学者掌握一些基本控件的用法! 这里我把源码一并给出,这也是我第一个C#上手程序,虽然只用了短短几个小时,但是我已经可以体会到C#强大的功能,今后还会继续深入研究! ps:程序基本完成了自动登录的全过程,但是没有完善保存列表的功能,这个也是比较简单的,下次完善吧,就算留给你们一个课后作业,高手不要见笑,毕竟你们看来程序还是非常简单的,至少我自己写完也是有这个感觉!如果你们谁完善了别忘了发给小焱一份哦! 程序使用VisualStudio2005 编译完成,如果想单独运行请确保已经安装.net framework 2.0 框架!
  一个PHPer的惨痛教训   经过一段时间的学习,相信大家已经能编出一些像模像样的PHP程序了,但因为PHP是明码的脚本语言,如何保护自己的程序就提到了日程上来。记得我有个非常好的朋友曾经向我大倒苦水,原来他加了半个月的夜班,给别人开发了一套PHP程序,结果遇到了奸商,人家收了源代码说是先测试,然后就消失不见了,电话打不通,QQ也永远不在线了。   仔细想来,使用PHP开发的程序,都是源代码,辛辛苦苦写出来,任何人都可以拿去随便用随便改,这确实是个头疼的问题。现在大家都在说要保护知识产权,看来得找个方法保护PHP源代码。翻遍PHP手册也没有找到解决方法,不过还好,终于让我在网上找到了一个PHP保护神——Zend Guard。   Zend Guard的作用,就是用编译处理的方式来保护PHP源代码免于被反编译查看、未经授权的定制修改、未经许可的使用和重新发布等。而且,它是PHP的东家Zend公司开发的,是完全为PHP量身定做的保护神。   下面,请大家就和我一起来学习使用Zend Guard,加密保护我们的PHP源代码吧。      实战:加密PHP源代码   首先,我们把PHP保护神请回家,从http://downloads.phpchina.com/zend/guard/5.0.0/ZendGuard-5_0_0.exe(快车代码为:CF0802TSWC01)下载后,运行安装包,一路点击Next(下一步)即可安装好。接下来让我们准备一个简单的PHP程序test.php,用来测试能否被Zend Guard保护起来。test.php的代码如下:      phpinfo();   ?>   打开Zend Guard,从File(文件)菜单点击,新建一个项目,如图1所示。点击Next进入目录和文件添加界面,因为我们只是测试一个文件,所以点Add File将test.php添加进来,再点击Finish(完成)即可生成项目。      这时,Zend Guard会自动打开新建立的项目,在界面的左边列出项目中的文件,右边列出项目的相关信息。现在,我们就可以将源代码编译了。点击右边Links(链接)中的Encode(编译),界面最下面的Console(控制台)窗口显示“The operation has completed successfully.”,意思为编译已经完成。   现在再去加密后文件保存的目录中,会看到其中也有一个test.php,它是否和原来的test.php一样呢?用编辑软件打开它,可以看到它不再是原来的内容了,如图2所示。注意:自己一定要保存好原始代码,不然丢失了,连你自己也没有办法查看和修改的。      接下来测试一下加密的代码,从浏览器访问加密后的PHP程序,哎呀,出错了,不能运行,并显示如图3所示的信息。原来,使用Zend Guard加密后的PHP程序,还需要一个搭档—Zend Optimizer,才能正常执行并提升效率。可从http://downloads.phpchina.com/zend/optimizer/3.3.0/ZendOptimizer-3.3.0a-Windows-i386.exe下载安装(快车代码:CF0802TSWC02)。安装过程中,“Choose the php.ini folder”这一步表示设置系统上PHP的配置文件php.ini的位置,“Choose the Web server's root folder”这一步表示设置Web服务器软件所在的位置。安装完成以后,用记事本打开php.ini,在最后我们会看到类似下面的配置信息:      [Zend]   zend_extension_manager.optimizer_ts="E:\Program Files\Zend\ZendOptimizer-3.3.0\lib\Optimizer-3.3.0"   zend_extension_ts="E:\Program Files\Zend\ZendOptimizer-3.3.0\lib\ZendExtensionManager.dll"   这就表示Zend Optimizer已经安装成功了,我们可以重新启动Web服务器软件,让Zend Optimizer生效即可。注意:如果所使用的服务器已经安装过或者包含了Zend Optimizer,就不用再次安装了。   现在再次从浏览器访问加密后的PHP程序试试,果然可以正常运行了,从显示的信息中,我们可以看到Zend Optimizer的信息(见图4)。      知其所以然   解析Zend Guard加密原理      让我们看看如图5所示的流程,就可以对Zend Guard的保护原理一目了然了。通过Zend Guard将PHP源代码编译为加密代码,然后通过加载了Zend Optimizer的PHP执行即可。分发给别人的程序,是加密后的代码,可以执行,但是没有源代码,别人也就无法查看和修改了。因而,我们可以在程序中加入适当的代码,用来检测系统的当前时间,看是否超过了预先设置的期限,如果超过了,就退出程序不让继续执行。如此一来,奸商再也不能白白获得我们的劳动成果了。      Zend Guard的工作原理和Java类似,编译后的PHP程序就像编译好的Java二进制代码,需要JVM的支持才能运行,Zend Optimizer可以看作是PHP的虚拟机。Zend Guard与Zend Optimizer相互配合,就能完成编译加密和执行编译后代码的工作。   在上面展示的图片中,License管理的方面属于更为深层的使用,可以用来生成许可文件,从而通过选择不同的许可模式来限制程序的使用,例如同时使用的用户数、时间限制、网络分段或者特定的服务器等。有兴趣的读者可以查看Zend Guard自身所带的帮助文件,来了解具体的用法。      高手论道   要想练PHP神功,   还得通LAMP经脉   在很多招聘PHP人才的信息中,我们时常会看到要求熟悉LAMP,那么什么是LAMP呢?      LAMP是Linux、Apache、MySQL、PHP(有时也指Perl或者Python)四者合一的简称。Linux是最强大的开源操作系统,Apache是最强大的开源Web服务器软件,MySQL是最流行的开源数据库系统,PHP是最流行的开源Web开发语言。1998年Michael Kunze在电脑杂志C'T撰写的文章中首次使用了缩略语LAMP。它所组成的各组件都是开源软件,因此很方便自由地获取,并且性能良好功能强大,导致这些组件的广泛使用,并不断完善发展,与J2EE和.Net商业软件形成三足鼎立之势,受到整个IT界的关注。      既然我们要学好PHP,那么LAMP中的其他三项都是不可或缺的,只有四者结合,才能练就PHP神功!因为PHP与MySQL是完美搭档,我们的程序要想做得好,就必须考虑到数据库的灵活使用。要想让PHP程序发挥最大的作用,这需要靠Apache的有力支持和稳定的运行。而这一切,在Linux操作系统上,才能完美演绎。

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧