[*] -  SecureInfo.eu, /Crypto/fibonacci-crypt.py

Back


#!/usr/bin/python3

import sys
APP = sys.argv[0].split('/')[-1]

##################################################################################################################################
#
#  Funcz
#

def usage():
  print("Usages:")
  print("%s <-L #|-n #|-l #>" % APP)
  print("%s <-f infile> <-o outfile>" % APP)
  print("")
  print(" -L : print # items of suite")
  print(" -l : return the nearest item")
  print(" -n : print # index of suite")
  print("")
  print("-E : end of index in array of fibonnaci numbers")
  print("-S : start of index in array of fibonnaci numbers")
  print("-Z : size fibonnaci list")
  print("")
  print("-f : source file")
  print("-o : dest file")
  print("")
  sys.exit()

def fibonnaci_list(n):
  ret = []
  i = 0
  b = 0
  a = 1
  while( i < n ):
    i += 1
    ret.append(b)
    t = a
    a = b
    b = t+b
  return(ret)

##################################################################################################################################
#
#  Args
#

i,a,b  = 0,1,0
n,l    = 10,2**64
t      = 0
lim    = 0
dolist = 0
last   = 0
src_file = ""
dst_file = ""
start  = 0
end    = 256
size   = 2000

for id in range(1,len(sys.argv[1:])+1):

  av = sys.argv[id]

  if av == "-h":
    usage()

  if av == "-S":
    start = sys.argv[id+1]

  if av == "-E":
    end = sys.argv[id+1]

  if av == "-Z":
    size = sys.argv[id+1]

  if av == "-L":
    dolist = 1
    n = int(sys.argv[id+1])

  if av == "-f":
    src_file = sys.argv[id+1]

  if av == "-o":
    dst_file = sys.argv[id+1]

  if av == "-n":
    n = int(sys.argv[id+1])
    lim = 0

  elif av == "-l":
    l = int(sys.argv[id+1])
    n = l
    lim = 1

##################################################################################################################################
#
# Fibonnacci
#

# Crypt/decrypt ------------------------------------------------------------------------------------------------------------------

if src_file:
  r = fibonnaci_list(int(size))[int(start):int(end)]
  d = b""
  b = open(src_file,"rb").read()
  while i < len(b):
    c = b[i]
    e = c^(r[i%len(r)]%256)
    d += bytes([e])
    i += 1

  if dst_file:
    open(dst_file,"wb").write(d)
  else:
    print(d)
  exit()

# List ---------------------------------------------------------------------------------------------------------------------------

while( i < n ):

  i += 1
  if dolist == 1:
    if b <= l:
      print("%-3s | %s" % (i,b))
  else:
    if lim == 0:
      if i == n:
        print("%-3s | %s" % (i,b))
  if lim == 1:
    if b < l:
      last = b
    else:
      break

  t = a
  a = b
  b = t+b
⬆️ Top
admin