找回密码
 加入
搜索
查看: 30149|回复: 77

[原创] 字符加密/解密器(仿RC4加密)

 火... [复制链接]
发表于 2008-11-23 18:10:44 | 显示全部楼层 |阅读模式
大家都知道RC4字符加密/解密,但是现在新版的根本不支持了,所以本人花了一天时间搞这个字符加密/解密
支持新版并支持中文。有高人可以指点一下,但别打击喔。

11月24日重新更新密码计算方法,密码已经支持任何字符,并添加密码等级,使密码更复杂
现在加密过的字符在没有原密码情况下破解几乎为0(要看你什么设密码了)
测试过用10位数加密150行,每行字符小于200个字 的文件 只要0.3秒,解密要0.4秒
密码位数越长,花的时间就会加大一点


$sd='qin147原创的字符加密器'
$jm=_jiami(1, $sd, '我的密码pass#$*_ (@',2) ;_jiami( 1加密 0解密 , 要加密字符, 密码 , 等级 ) 密码可以是任何字符(如中文或符号) 等级0-9
$qm=_jiami(0, $jm, '我的密码pass#$*_ (@',2)
MsgBox(0,'qin147字符加密器测试','加密后:'&$jm&@LF _ 
                        &@LF _ 
                        &'解密后:'&$qm)
Func _jiami($jiami_lp, $jiami_txt,$jiami_pas,$jiami_lev)
        Local $tlev,$bhb,$jjxc =1,$Num
        Local $jh[100]
        If $jiami_txt='' Or $jiami_pas='' Or StringLen ($jiami_pas) > 100 _
                Or $jiami_lev > 9 Or Int($jiami_lev)<>$jiami_lev Or $jiami_lev < 0 Then Return -1        
        If $jiami_lp = 1 Then
                $sosu=StringLen ($jiami_pas)
                For $pa_s=1 To $sosu
                        $jh[$pa_s]=Asc(StringMid($jiami_pas,$pa_s,1))
                        $Num=$Num&$jh[$pa_s]
                        If $jjxc > 3 Then $jjxc=1
                        If $jjxc=1 Then
                                $bhb=Int($bhb+$jh[$pa_s])
                        ElseIf        $jjxc=2 Then
                                $bhb=Int($bhb*$jh[$pa_s])
                        ElseIf        $jjxc=3 Then
                                $bhb=Int($bhb-$jh[$pa_s])
                        EndIf                
                        $jjxc +=1
                Next
                $Num=StringLeft($Num, $jiami_lev)&$bhb&StringRight($Num, $jiami_lev)
                $jiami_txt=StringTrimLeft(StringToBinary($jiami_txt,2),2)
                $y_si=$sosu
                $j_si=1
                Do        
                        $vi=StringMid($jh[$j_si],1,1)+StringMid($jh[$y_si],StringLen ($jh[$y_si]),1)
                        $tempa=StringMid($jiami_txt,1,$vi-1)
                        $tempb=StringMid($jiami_txt,$vi)
                        $jiami_txt=$tempa&$jh[$j_si]&$tempb
                        $y_si -=1
                        $j_si +=1
                Until $y_si <= 0 And $j_si >= $sosu
                $st=StringLen ($Num)
                $txtshi=StringLen ($jiami_txt)
                For $kl=1 To $st
                        $rtemp=''
                        For $vn=1 To $txtshi Step StringMid($Num,$kl,1)+30
                                $rtemp = StringMid($jiami_txt,$vn,StringMid($Num,$kl,1)+30)&$rtemp
                        Next        
                        $jiami_txt=$rtemp
                Next        
                Return $jiami_txt
        ElseIf $jiami_lp = 0 Then
                $sosu=StringLen ($jiami_pas)
                For $pa_s=1 To $sosu
                        $jh[$pa_s]=Asc(StringMid($jiami_pas,$pa_s,1))
                        $Num=$Num&$jh[$pa_s]
                        If $jjxc > 3 Then $jjxc=1
                        If $jjxc=1 Then
                                $bhb=Int($bhb+$jh[$pa_s])
                        ElseIf        $jjxc=2 Then
                                $bhb=Int($bhb*$jh[$pa_s])
                        ElseIf        $jjxc=3 Then
                                $bhb=Int($bhb-$jh[$pa_s])
                        EndIf                
                        $jjxc +=1                        
                Next
                $Num=StringLeft($Num, $jiami_lev)&$bhb&StringRight($Num, $jiami_lev)
                $st=StringLen ($Num)
                Do         
                        $txtshi=StringLen ($jiami_txt)
                        $rtemp=''
                        Do         
                                $rtemp =$rtemp&StringRight ($jiami_txt, StringMid($Num,$st,1)+30)
                                $jiami_txt=StringTrimRight ($jiami_txt, StringMid($Num,$st,1)+30)
                                $txtshi -= StringMid($Num,$st,1)+30        
                        Until $txtshi <= 0
                        $jiami_txt=$rtemp
                        $st -=1
                Until $st <= 0        
                $y_si=$sosu
                $j_si=1
                Do
                        $vi=StringMid($jh[$y_si],1,1)+StringMid($jh[$j_si],StringLen ($jh[$j_si]),1)
                        $tempa=StringMid($jiami_txt,1,$vi-1)
                        $tempb=StringMid($jiami_txt,$vi+StringLen ($jh[$y_si]))
                        $jiami_txt=$tempa&$tempb        
                        $y_si -=1
                        $j_si +=1                        
                Until $y_si <= 0
                $jiami_txt='0x'&$jiami_txt
                $jiami_txt = BinaryToString($jiami_txt,2)
                Return $jiami_txt
        Else
                Return -1
        EndIf
EndFunc


[ 本帖最后由 qin147 于 2008-11-24 15:33 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 2金钱 +6 收起 理由
renxiaoyao + 1 非常棒!新人没啥钱,请笑纳
sanhen + 5 原创内容,感谢你对论坛的支持;希望继续发 ...

查看全部评分

发表于 2008-11-23 22:20:33 | 显示全部楼层
非常不错的函数。并且在新版下支持中文,GOOD。
发表于 2008-11-27 11:32:24 | 显示全部楼层
很好用的东东!!
发表于 2008-12-7 14:23:21 | 显示全部楼层
我看不懂
发表于 2008-12-7 14:23:46 | 显示全部楼层
我马上就有15快钱啦,哈哈
发表于 2008-12-10 21:12:14 | 显示全部楼层
原帖由 alasnow 于 2008-12-7 14:23 发表
我马上就有15快钱啦,哈哈


明明看到你金钱是个小光头-----0,哪来的15块??是不是拿去赌博了....
发表于 2008-12-19 01:29:55 | 显示全部楼层
下个收藏了
发表于 2009-1-8 11:39:31 | 显示全部楼层
我用了,非常好,顶你一个,赞!
发表于 2009-1-27 04:04:28 | 显示全部楼层
謝謝分享...
下載學習...
发表于 2009-1-30 21:30:06 | 显示全部楼层
该函数可以支持中文。但加密“密码[$jiami_pas]”存在问题,加密级别貌似也没有用,
整体来多说还是不错的
发表于 2009-2-9 22:14:54 | 显示全部楼层
如果加密的字符串小于3,会有问题的,大家可以测试一下
我稍微修改了一下,有些旁门左道,不过还能凑合用,就是加密时字符串多加个"---",相反解码时删去最后3个字符后返回。。。。

无论如何,终于可以在U模式下,直接F5就可以运行了,非常感谢楼主。。(如果有时间,希望再改进一下上面的问题,呵呵)
发表于 2009-2-17 08:36:50 | 显示全部楼层
用楼主的代码就可以直接在U模式下使用
发表于 2009-3-1 20:11:49 | 显示全部楼层
解密单一字符有错误,比如4,白 都不能正常解密
发表于 2009-5-19 16:46:07 | 显示全部楼层
这个太好了,谢谢分享
发表于 2009-6-13 21:39:54 | 显示全部楼层
好东西,收藏了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-4 13:31 , Processed in 0.080590 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表