manson 发表于 2009-1-15 12:46:19

加密为什么没有效果

以下代码段执行之后,为什么对话框显示的内容是空白的呢?求教。
;RC4加密(AU3内置函数)
#include <String.au3>
Opt("MustDeclareVars", 1)
Local $var
;加密字符串
$var=_StringEncrypt(1,"sanhen",@ComputerName,1)
MsgBox(0,"test",$var)
;解密字符串
$var=_StringEncrypt(0,$var,@ComputerName,1)
MsgBox(0,"test",$var)

[ 本帖最后由 manson 于 2009-2-2 01:09 编辑 ]

manson 发表于 2009-1-15 16:02:28

我用的版本是3.2.12的
改用了3.3还是不行。。。。。

sxd 发表于 2009-1-15 17:39:23

帮助里的例子也无法显示....

sxd 发表于 2009-1-15 18:24:48

参考这个看看先
http://www.autoitscript.com/forum/index.php?showtopic=62757&hl=StringEncrypt

下班了 没来得及看

sanhen 发表于 2009-1-17 00:31:00


#include <String.au3>
$String = "The quick brown fox jumps over the lazy dog.闃块?璇村埌鍥藉?鎭舵悶"
$Key = "Password"
ConsoleWrite('@@ _StringEncrypt(1, $string, $key ) = ' & _StringEncrypt(1, $String, $Key) & @CRLF & '>Error code: ' & @error & @CRLF);### Debug Console
ConsoleWrite('@@ _StringEncrypt(0, _StringEncrypt(1, $string, $key ), $key ) = ' & _StringEncrypt(0, _StringEncrypt(1, $String, $Key), $Key) & @CRLF & '>Error code: ' & @error & @CRLF);### Debug Console
ConsoleWrite('@@ _StringEncryptW(1, $string, $key ) = ' & _StringEncryptW(1, $String, $Key) & @CRLF & '>Error code: ' & @error & @CRLF);### Debug Console
ConsoleWrite('@@ _StringEncryptW(0, _StringEncryptW(1, $string, $key ), $key ) = ' & _StringEncryptW(0, _StringEncryptW(1, $String, $Key), $Key) & @CRLF & '>Error code: ' & @error & @CRLF);### Debug Console

MsgBox(0,"test",_StringEncryptW(0, _StringEncryptW(1, $String, $Key), $Key))

Func _StringEncryptW($i_Encrypt, $s_EncryptText, $s_EncryptPassword, $i_EncryptLevel = 1)
    If $i_Encrypt <> 0 And $i_Encrypt <> 1 Then
      SetError(1)
      Return ''
    ElseIf $s_EncryptText = '' Or $s_EncryptPassword = '' Then
      SetError(1)
      Return ''
    Else
      If Number($i_EncryptLevel) <= 0 Or Int($i_EncryptLevel) <> $i_EncryptLevel Then $i_EncryptLevel = 1
      Local $v_EncryptModified
      Local $i_EncryptCountH
      Local $i_EncryptCountG
      Local $v_EncryptSwap
      Local $av_EncryptBox
      Local $i_EncryptCountA
      Local $i_EncryptCountB
      Local $i_EncryptCountC
      Local $i_EncryptCountD
      Local $i_EncryptCountE
      Local $v_EncryptCipher
      Local $v_EncryptCipherBy
      If $i_Encrypt = 1 Then
            For $i_EncryptCountF = 0 To $i_EncryptLevel Step 1
                $i_EncryptCountG = ''
                $i_EncryptCountH = ''
                $v_EncryptModified = ''
                For $i_EncryptCountG = 1 To StringLen($s_EncryptText)
                  If $i_EncryptCountH = StringLen($s_EncryptPassword) Then
                        $i_EncryptCountH = 1
                  Else
                        $i_EncryptCountH += 1
                  EndIf
                  $v_EncryptModified = $v_EncryptModified & ChrW(BitXOR(AscW(StringMid($s_EncryptText, $i_EncryptCountG, 1)), AscW(StringMid($s_EncryptPassword, $i_EncryptCountH, 1)), 255))
                Next
                $s_EncryptText = $v_EncryptModified
                $i_EncryptCountA = ''
                $i_EncryptCountB = 0
                $i_EncryptCountC = ''
                $i_EncryptCountD = ''
                $i_EncryptCountE = ''
                $v_EncryptCipherBy = ''
                $v_EncryptCipher = ''
                $v_EncryptSwap = ''
                $av_EncryptBox = ''
                Local $av_EncryptBox
                For $i_EncryptCountA = 0 To 255
                  $av_EncryptBox[$i_EncryptCountA] = AscW(StringMid($s_EncryptPassword, Mod($i_EncryptCountA, StringLen($s_EncryptPassword)) + 1, 1))
                  $av_EncryptBox[$i_EncryptCountA] = $i_EncryptCountA
                Next
                For $i_EncryptCountA = 0 To 255
                  $i_EncryptCountB = Mod(($i_EncryptCountB + $av_EncryptBox[$i_EncryptCountA] + $av_EncryptBox[$i_EncryptCountA]), 256)
                  $v_EncryptSwap = $av_EncryptBox[$i_EncryptCountA]
                  $av_EncryptBox[$i_EncryptCountA] = $av_EncryptBox[$i_EncryptCountB]
                  $av_EncryptBox[$i_EncryptCountB] = $v_EncryptSwap
                Next
                For $i_EncryptCountA = 1 To StringLen($s_EncryptText)
                  $i_EncryptCountC = Mod(($i_EncryptCountC + 1), 256)
                  $i_EncryptCountD = Mod(($i_EncryptCountD + $av_EncryptBox[$i_EncryptCountC]), 256)
                  $i_EncryptCountE = $av_EncryptBox + $av_EncryptBox[$i_EncryptCountD]), 256)]
                  $v_EncryptCipherBy = BitXOR(AscW(StringMid($s_EncryptText, $i_EncryptCountA, 1)), $i_EncryptCountE)
                  $v_EncryptCipher &= Hex($v_EncryptCipherBy, 2)
                Next
                $s_EncryptText = $v_EncryptCipher
            Next
      Else
            For $i_EncryptCountF = 0 To $i_EncryptLevel Step 1
                $i_EncryptCountB = 0
                $i_EncryptCountC = ''
                $i_EncryptCountD = ''
                $i_EncryptCountE = ''
                $v_EncryptCipherBy = ''
                $v_EncryptCipher = ''
                $v_EncryptSwap = ''
                $av_EncryptBox = ''
                Local $av_EncryptBox
                For $i_EncryptCountA = 0 To 255
                  $av_EncryptBox[$i_EncryptCountA] = AscW(StringMid($s_EncryptPassword, Mod($i_EncryptCountA, StringLen($s_EncryptPassword)) + 1, 1))
                  $av_EncryptBox[$i_EncryptCountA] = $i_EncryptCountA
                Next
                For $i_EncryptCountA = 0 To 255
                  $i_EncryptCountB = Mod(($i_EncryptCountB + $av_EncryptBox[$i_EncryptCountA] + $av_EncryptBox[$i_EncryptCountA]), 256)
                  $v_EncryptSwap = $av_EncryptBox[$i_EncryptCountA]
                  $av_EncryptBox[$i_EncryptCountA] = $av_EncryptBox[$i_EncryptCountB]
                  $av_EncryptBox[$i_EncryptCountB] = $v_EncryptSwap
                Next
                For $i_EncryptCountA = 1 To StringLen($s_EncryptText) Step 2
                  $i_EncryptCountC = Mod(($i_EncryptCountC + 1), 256)
                  $i_EncryptCountD = Mod(($i_EncryptCountD + $av_EncryptBox[$i_EncryptCountC]), 256)
                  $i_EncryptCountE = $av_EncryptBox + $av_EncryptBox[$i_EncryptCountD]), 256)]
                  $v_EncryptCipherBy = BitXOR(Dec(StringMid($s_EncryptText, $i_EncryptCountA, 2)), $i_EncryptCountE)
                  $v_EncryptCipher = $v_EncryptCipher & ChrW($v_EncryptCipherBy)
                Next
                $s_EncryptText = $v_EncryptCipher
                $i_EncryptCountG = ''
                $i_EncryptCountH = ''
                $v_EncryptModified = ''
                For $i_EncryptCountG = 1 To StringLen($s_EncryptText)
                  If $i_EncryptCountH = StringLen($s_EncryptPassword) Then
                        $i_EncryptCountH = 1
                  Else
                        $i_EncryptCountH += 1
                  EndIf
                  $v_EncryptModified &= ChrW(BitXOR(AscW(StringMid($s_EncryptText, $i_EncryptCountG, 1)), AscW(StringMid($s_EncryptPassword, $i_EncryptCountH, 1)), 255))
                Next
                $s_EncryptText = $v_EncryptModified
            Next
      EndIf
      Return $s_EncryptText
    EndIf
EndFunc ;==>_StringEncryptW

cxlater 发表于 2009-1-17 01:34:55

编码问题
scite里调试是用unicode 编码
用ansi编码编译后可以使用

manson 发表于 2009-2-2 01:08:52

确实如此,谢谢楼上!!!:face (36):
页: [1]
查看完整版本: 加密为什么没有效果