Jump to content

Password based Rotate.


ezzetabi
 Share

Recommended Posts

$sT = 'If they make mistakes, lets follow them! (Remainder lesson)'
$sPass = 'a pass!'

MsgBox(16,'', _Rot($st, $sPass, 0))
MsgBox(16,'', _Rot($st, $sPass, 1))

Func _Rot(ByRef $sInput, $sPass, $bMode)
  Local $sChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz'
  Local $iNofC = StringLen($sChars)
  Local $c, $iPos, $sChr
  Local $ipl = StringLen($sPass)
  Local $isl = StringLen($sInput)
  Local $aiPass[$ipl]
  
  For $c = 0 to $ipl - 1
    $aiPass[$c] = Asc(StringMid($sPass, $c + 1, 1)) + 17
  Next
  $sPass = 0
  For $c = 1 to $isl
    $sChr = StringMid($sInput, $c, 1)
    $iPos = StringInStr($sChars, $sChr, 1)
    If $iPos > 0 Then
      If $bMode = 0 Then
        $sChr = StringMid($sChars, _Mod($aiPass[Mod($c - 1, $ipl)] + $iPos, $iNofC), 1)
      Else
        $sChr = StringMid($sChars, _Mod(- $aiPass[Mod($c - 1, $ipl)] + $iPos, $iNofC), 1)
      EndIf
    EndIf
    
    
    $sInput = StringLeft($sInput, $c - 1) & $sChr & StringTrimLeft($sInput, $c)
  Next
  
  Return $sInput
EndFunc

Func _Mod($iDividend, $iDivisor)
  Local $iMod
  If $iDivisor <> 0 Then
    If $iDividend < 0 Then
      $iDividend = $iDividend * -1
      $iMod = Mod($iDividend, $iDivisor)
      
      if $iMod = 0 Then
        Return $iMod
      Else
        Return $iDivisor - $iMod
      EndIf
    EndIf
    
    Return Mod($iDividend, $iDivisor)
  Else
    SetError(1)
    Return '-1.#IND'
  EndIf
EndFunc
Exit

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...