AutoIt3字符串加密解密算法的实现

AutoIt3 10/26 阅读 780 views次 人气 0
摘要:

AutoIt3针对字符串实现,加密解密函数,调用时,只要传入字符串以及加密密钥,就可以达到加密解密的效果。

代码:

; binary encrypt..
func CSbinEncrypt($str, $key, $csl=20)
    $r_num = StringMid(MakeRandomXString(), 1, 10)
    return $r_num & AICipherSaber($str, $key, $r_num, $csl)
endfunc

; binary decrypt..
func CSbinDecrypt($str, $key, $csl=20)
    $str = BinaryToString($str)
    $r_num = StringMid($str, 1, 10)
    $str = StringMid($str, 11)
    return AICipherSaber($str, $key, $r_num, $csl)
endfunc

func MakeRandomXString()
    SRandom(@MSEC*@MSEC*@MIN)
    local $a[32]
    local $x = 0
    while $a[31] = ""
        $tmp = chr(Random(48, 71, 1))
        if StringIsXDigit($tmp) then
            $a[$x] = Asc($tmp)
            $x += 1
        endif
    wend
    return StringFromASCIIArray($a)
 endfunc

; CipherSaber Algorithm..
func AICipherSaber($d, $p, $rnum, $csl=20)

    $p &= $rnum
    local $S[256]

    for $i = 0 to 255
        $S[$i] = $i
    next

    local $j = 0, $t = StringLen($p)
    local $kkk[256]

    for $i = 0 to 255
        $kkk[$i] = Asc(StringMid($p, $j+1, 1))
        $j = Mod(($j + 1), $t)
    next

    $j = 0
    for $kk = 0 to $csl-1 ; CS2 loops
        for $i = 0 to 255
            $j = BitAND(($j + $S[$i] + $kkk[$i]),  0xff)
            $t = $S[$i]
            $S[$i] = $S[$j]
            $S[$j] = $t
        next
    next
    $i = 0
    $j = 0
    local $ii = 0
    local $ret = ''
    $dlen = StringLen($d)

    for $ii = 0 to $dlen-1
        $c = StringMid($d, $ii+1, 1)
        $i = BitAND(($i + 1), 0xff)
        $j = BitAND(($j + $S[$i]), 0xff)
        $t = $S[$i]
        $S[$i] = $S[$j]
        $S[$j] = $t
        $t = BitAND(($S[$i] + $S[$j]), 0xff)
        $ret &= Chr(BitXOR($S[$t], Asc($c)))
    next
    return $ret
endfunc


评论

该文章不支持评论!

分享到: