Mio Cifrario

Stato
Discussione chiusa ad ulteriori risposte.

_Wizard

Utente Silver
12 Marzo 2009
0
0
0
55
Sulle orme del cifrario di meh ho scritto anch'io un semplice cifrario, ecco le istruzioni:
zeroes: / [ ] { ~ ) @ # _ , ; :
ones: + - % ? } < > ( !
- Add a random char with a 42% chance:
0-9 A-Z a-z & | * ^ =
Lettera: O
O in binario: 01001111
reverso: 11110010
inverto i bit: 00001101
reverso ancora: 10110000
sostituisco i caratteri *casualmente* (vedi sopra):
+~?%[)@_
calcolo un numero casuale, se è > di 42 aggiungo un altro carattere:
+0~D?%^[)P@_&
Mia soluzione in php:
funzioni: http://phate.pastebin.com/m5eca7475
main: http://phate.pastebin.com/m6b0dc82c
 
Codice:
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from random import choice
from random import randint
from string import ascii_letters
  
def dec2bin(d):
  HexBin ={"0":"0000", "1":"0001", "2":"0010", "3":"0011", "4":"0100", "5":"0101", "6":"0110", "7":"0111", "8":"1000", "9":"1001", "A":"1010", "B":"1011", "C":"1100", "D":"1101", "E":"1110", "F":"1111"}
  return "".join([HexBin[i] for i in '%X'%d]).lstrip('0')

ran=ascii_letters+'1234567890&|*^='

def crypt(s):
  end=''
  for c in s:
    b=dec2bin(ord(c)).zfill(8)
    for bb in b:
      if bb == '0':
	end+=choice(list('+-%?}<>(!'))
      else:
	end+=choice(list('/[]{~)@#_,;:'))
      if randint(1,100)>42:
	end+=choice(ran)
  return end

def decrypt(s):
  i=1
  end=''
  tmp=''
  for c in s:
    if c in '+-%?}<>(!':
      tmp+='0'
    elif c in '/[]{~)@#_,;:':
      tmp+='1'
    else:
      continue
    if i%8==0:
      end+=chr(int(tmp,2))
      tmp=''
    i+=1
  return end
il tuo algoritmo "complicato" in realtà si può semplificare enormemente, fai parecchi passaggi che si annullano a vicenda... (che poi, scusa, ma l'algoritmo l'hai descritto con i piedi...)
 
_Wizard ha detto:
Lettera: O
O in binario: 01001111
reverso: 11110010
inverto i bit: 00001101
reverso ancora: 10110000

perché questa cosa? :-/
vedi qui:
Codice:
Lettera: O
O in binario: 01001111
inverto i bit: 10110000

scrivi meno e cripti più velocemente
 
Io sono dell'opinione che qualsiasi programma che debba criptare non vada fatto con linguaggi di scripting poiché diverrebbero troppo lenti.....
Se poi è fatto per esercitarsi o implementare l'algoritmo creato non importa più tanto xD.

Io in un algoritmo che stavo costruendo permutavo i bit, in questo modo si hanno 256 caratteri possibili per ogni byte e con un altro paio di elaborazioni sulla stringa per intero si può ottenere un solido algoritmo.
 
Stato
Discussione chiusa ad ulteriori risposte.