Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Nouveau algorithme #1

Open
dridk opened this issue Aug 28, 2023 · 0 comments
Open

Nouveau algorithme #1

dridk opened this issue Aug 28, 2023 · 0 comments

Comments

@dridk
Copy link
Owner

dridk commented Aug 28, 2023

Vous pouvez remplacer l'ancien algorithme par le nouveau , et donc réécrire de façon plus propre.

Le nouvelle algorithme fonctionne de la façon suivante : A chaque ligne d'un tableau de N lignes est associé un bit ( 1 ou 0) . En permutant les lignes du tableau, nous pouvons écrire un message en stockant un caractères pour 8 lignes ( 1 Byte) . Si toutes les lignes ne sont pas utilisé, nous utiliserons les bits restants comme bit de correction d'erreur en utilisant l'algorithme de Reed Solomon. https://pypi.org/project/reedsolo/

Algorithme du bit par lignes

  • On concatène les colonnes d'une ligne dans un series de string. On peut mettre en arguments les colonnes souhaité :
df = pd.read_csv("iris.csv") 
serie = df.astype(str)[selected_columns].sum(axis=1)
# serie = pd.Series["truc", "bidule"... ]
  • On hash chaque string avec une fonction de de hashage HMAC ( = avec mot de passe ). On prend le premier octet du hash et on recupère son modulo 2 pour obtenir un bit
serie = serie.apply(lambda x:   hmac.new("mot de passe", x,  hashlib.sha256).digest()[0] % 2 )
serie = pd.Series[1,0,0,1,0,1,......]
  • On encode le message souhaité en permuttant les lignes. Ce qu'on peut faire, c'est considéré la serie comme un pool de 1 et de 0, et venir piocher les bits qd y a besoin
# shuffle en preservant les index 
s = s.sample(frac=1)

message = b"hello"
permutations = []
for byte in message:
     for bit in bytes :  # Avec des operations bit a bit 
            idx = s[s == bit][0]  # On recupere un bit de la liste et le garde 
            permutations.append(idx)
            del s[idx]  # On continue jusqu'a epuisement .. 
  • On reordonne le dataframe avec les nouvelles permutations
df = df.loc[permutations]   # Pas confondre iloc et loc 

Utilisation en ligne de commande

steganodf encode --payload hello --password "optionnalPassword" --input test.csv --output test.stegano.csv 
steganodf decode  --password "optionnalPassword" --input test.steganodf.csv --output test.csv 

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant