mshuking 发表于 2015-1-15 10:33:03

[求助]加密解密

本帖最后由 mshuking 于 2015-1-15 19:26 编辑

如何移植 "代码1" 移到 "代码2"

代码1$pwd = "admin123"
$Encryption = StringEncrypt(1, $pwd, "abc", 1, 4)
$Decryption = StringEncrypt(0, $Encryption, "abc", 1, 4)
MsgBox(0, '加密前:' & $pwd , '加密:' & $Encryption & @CRLF & @CRLF & '解密:' & $Decryption)                       

Func StringEncrypt($i_Encrypt, $s_EncryptText, $s_EncryptPassword, $i_EncryptLevel = 1, $i_Flag = 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 $b_EncryptText
      Local $b_EncryptPassword
      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
      $b_EncryptText = StringToBinary($s_EncryptText, $i_Flag)
      $b_EncryptPassword = StringToBinary($s_EncryptPassword, $i_Flag)
      If $i_Encrypt = 1 Then
            For $i_EncryptCountF = 0 To $i_EncryptLevel Step 1
                $i_EncryptCountG = ''
                $i_EncryptCountH = ''
                $v_EncryptModified = Binary('')
                For $i_EncryptCountG = 1 To BinaryLen($b_EncryptText)
                  If $i_EncryptCountH = BinaryLen($b_EncryptPassword) Then
                        $i_EncryptCountH = 1
                  Else
                        $i_EncryptCountH += 1
                  EndIf
                  $v_EncryptModified = Binary($v_EncryptModified) & Binary('0x' & Hex(BitXOR(BinaryMid($b_EncryptText, $i_EncryptCountG, 1), BinaryMid($b_EncryptPassword, $i_EncryptCountH, 1), 255),2))
                Next
                $b_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] = Dec(StringTrimLeft(BinaryMid($b_EncryptPassword, Mod($i_EncryptCountA, BinaryLen($b_EncryptPassword)) + 1, 1),2))
                  $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 BinaryLen($b_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(BinaryMid($b_EncryptText, $i_EncryptCountA, 1), $i_EncryptCountE)
                  $v_EncryptCipher = Binary($v_EncryptCipher) & Binary('0x' & Hex($v_EncryptCipherBy, 2))
                Next
                $b_EncryptText = StringTrimLeft($v_EncryptCipher,2)
            Next
      Else
            $b_EncryptText = $s_EncryptText
            For $i_EncryptCountF = 0 To $i_EncryptLevel Step 1
                $b_EncryptText = Binary('0x' & $b_EncryptText)
                $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] = Dec(StringTrimLeft(BinaryMid($b_EncryptPassword, Mod($i_EncryptCountA, BinaryLen($b_EncryptPassword)) + 1, 1),2))
                  $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 BinaryLen($b_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(BinaryMid($b_EncryptText, $i_EncryptCountA, 1), $i_EncryptCountE)
                  $v_EncryptCipher = Binary($v_EncryptCipher) & Binary('0x' & Hex($v_EncryptCipherBy,2))
                Next
                $b_EncryptText = $v_EncryptCipher
                $i_EncryptCountG = ''
                $i_EncryptCountH = ''
                $v_EncryptModified = ''
                For $i_EncryptCountG = 1 To BinaryLen($b_EncryptText)
                  If $i_EncryptCountH = BinaryLen($b_EncryptPassword) Then
                        $i_EncryptCountH = 1
                  Else
                        $i_EncryptCountH += 1
                  EndIf
                  $v_EncryptModified = Binary($v_EncryptModified) & Binary('0x' & Hex(BitXOR(BinaryMid($b_EncryptText, $i_EncryptCountG, 1), BinaryMid($b_EncryptPassword, $i_EncryptCountH, 1), 255),2))
                Next
                $b_EncryptText = BinaryToString($v_EncryptModified, $i_Flag)
            Next
      EndIf
      Return $b_EncryptText
    EndIf
EndFunc   ;==>_StringEncrypt代码2#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form0 = GUICreate("加密解密", 268, 162)
$Label1 = GUICtrlCreateLabel("原密", 16, 16, 28, 20)
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
$Input1 = GUICtrlCreateInput("", 48, 16, 209, 21)

$Label2 = GUICtrlCreateLabel("加密", 16, 56, 28, 20)
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
$Input2 = GUICtrlCreateInput("", 48, 56, 209, 21)

$Label3 = GUICtrlCreateLabel("解密", 16, 96, 28, 20)
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
$Input3 = GUICtrlCreateInput("", 48, 96, 209, 21)

$Button1 = GUICtrlCreateButton("加密", 40, 128, 75, 25)
$Button2 = GUICtrlCreateButton("解密", 152, 128, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
      Case $Button1
                        $Encryption = StringEncrypt(1, $Input1, "abc", 1, 4)
                        GUICtrlSetData($Input2,$Encryption)
                Case $Button2
                        $Decryption = StringEncrypt(0, $Input2, "abc", 1, 4)
                        GUICtrlSetData($Input3,$Decryption)
        EndSwitch
WEnd
Func StringEncrypt($i_Encrypt, $s_EncryptText, $s_EncryptPassword, $i_EncryptLevel = 1, $i_Flag = 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 $b_EncryptText
      Local $b_EncryptPassword
      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
      $b_EncryptText = StringToBinary($s_EncryptText, $i_Flag)
      $b_EncryptPassword = StringToBinary($s_EncryptPassword, $i_Flag)
      If $i_Encrypt = 1 Then
            For $i_EncryptCountF = 0 To $i_EncryptLevel Step 1
                $i_EncryptCountG = ''
                $i_EncryptCountH = ''
                $v_EncryptModified = Binary('')
                For $i_EncryptCountG = 1 To BinaryLen($b_EncryptText)
                  If $i_EncryptCountH = BinaryLen($b_EncryptPassword) Then
                        $i_EncryptCountH = 1
                  Else
                        $i_EncryptCountH += 1
                  EndIf
                  $v_EncryptModified = Binary($v_EncryptModified) & Binary('0x' & Hex(BitXOR(BinaryMid($b_EncryptText, $i_EncryptCountG, 1), BinaryMid($b_EncryptPassword, $i_EncryptCountH, 1), 255),2))
                Next
                $b_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] = Dec(StringTrimLeft(BinaryMid($b_EncryptPassword, Mod($i_EncryptCountA, BinaryLen($b_EncryptPassword)) + 1, 1),2))
                  $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 BinaryLen($b_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(BinaryMid($b_EncryptText, $i_EncryptCountA, 1), $i_EncryptCountE)
                  $v_EncryptCipher = Binary($v_EncryptCipher) & Binary('0x' & Hex($v_EncryptCipherBy, 2))
                Next
                $b_EncryptText = StringTrimLeft($v_EncryptCipher,2)
            Next
      Else
            $b_EncryptText = $s_EncryptText
            For $i_EncryptCountF = 0 To $i_EncryptLevel Step 1
                $b_EncryptText = Binary('0x' & $b_EncryptText)
                $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] = Dec(StringTrimLeft(BinaryMid($b_EncryptPassword, Mod($i_EncryptCountA, BinaryLen($b_EncryptPassword)) + 1, 1),2))
                  $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 BinaryLen($b_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(BinaryMid($b_EncryptText, $i_EncryptCountA, 1), $i_EncryptCountE)
                  $v_EncryptCipher = Binary($v_EncryptCipher) & Binary('0x' & Hex($v_EncryptCipherBy,2))
                Next
                $b_EncryptText = $v_EncryptCipher
                $i_EncryptCountG = ''
                $i_EncryptCountH = ''
                $v_EncryptModified = ''
                For $i_EncryptCountG = 1 To BinaryLen($b_EncryptText)
                  If $i_EncryptCountH = BinaryLen($b_EncryptPassword) Then
                        $i_EncryptCountH = 1
                  Else
                        $i_EncryptCountH += 1
                  EndIf
                  $v_EncryptModified = Binary($v_EncryptModified) & Binary('0x' & Hex(BitXOR(BinaryMid($b_EncryptText, $i_EncryptCountG, 1), BinaryMid($b_EncryptPassword, $i_EncryptCountH, 1), 255),2))
                Next
                $b_EncryptText = BinaryToString($v_EncryptModified, $i_Flag)
            Next
      EndIf
      Return $b_EncryptText
    EndIf
EndFunc   ;==>_StringEncrypt
页: [1]
查看完整版本: [求助]加密解密