欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

不错的主要用于加密的vbs(asp)位移运算类

程序员文章站 2023-08-24 11:12:31
' aother: 奔腾的心 '   &n...
<script language="vbscript">
' aother: 奔腾的心
'     qq: 7180001
'   date: 2008-01-17

class mshift

    private m_lpower2(31)

    public function rshift(byval lthis, byval lbits)
        on error resume next
        init
        if (lbits <= 0) then
           rshift = lthis
        elseif (lbits > 63) then
           ' .. error ...
        elseif (lbits > 31) then
           rshift = 0
        else
           if (lthis and m_lpower2(31 - lbits)) = m_lpower2(31 - lbits) then
              rshift = (lthis and (m_lpower2(31 - lbits) - 1)) * m_lpower2(lbits) or 
m_lpower2(31)
           else
              rshift = (lthis and (m_lpower2(31 - lbits) - 1)) * m_lpower2(lbits)
           end if
        end if
    end function

    public function lshift(byval lthis, byval lbits)
        on error resume next
        init
        if (lbits <= 0) then
           lshift = lthis
        elseif (lbits > 63) then
           ' ... error ...
        elseif (lbits > 31) then
           lshift = 0
        else
           if (lthis and m_lpower2(31)) = m_lpower2(31) then
              lshift = (lthis and &h7fffffff) \ m_lpower2(lbits) or m_lpower2(31 - lbits)
           else
              lshift = lthis \ m_lpower2(lbits)
           end if
        end if
    end function

    private sub init()
        on error resume next
        m_lpower2(0) = &h1&
        m_lpower2(1) = &h2&
        m_lpower2(2) = &h4&
        m_lpower2(3) = &h8&
        m_lpower2(4) = &h10&
        m_lpower2(5) = &h20&
        m_lpower2(6) = &h40&
        m_lpower2(7) = &h80&
        m_lpower2(8) = &h100&
        m_lpower2(9) = &h200&
        m_lpower2(10) = &h400&
        m_lpower2(11) = &h800&
        m_lpower2(12) = &h1000&
        m_lpower2(13) = &h2000&
        m_lpower2(14) = &h4000&
        m_lpower2(15) = &h8000&
        m_lpower2(16) = &h10000
        m_lpower2(17) = &h20000
        m_lpower2(18) = &h40000
        m_lpower2(19) = &h80000
        m_lpower2(20) = &h100000
        m_lpower2(21) = &h200000
        m_lpower2(22) = &h400000
        m_lpower2(23) = &h800000
        m_lpower2(24) = &h1000000
        m_lpower2(25) = &h2000000
        m_lpower2(26) = &h4000000
        m_lpower2(27) = &h8000000
        m_lpower2(28) = &h10000000
        m_lpower2(29) = &h20000000
        m_lpower2(30) = &h40000000
        m_lpower2(31) = &h80000000
    end sub

end class

dim sft
set sft = new mshift
msgbox sft.rshift(200, 4)
msgbox sft.lshift(200, 4)
set sft = nothing
</script>


<script language="javascript">
alert(200<<4);
alert(200>>4);
</script>