PHP Travailler le code binaire d'une chaine

PHP Travailler le code binaire d'une chaine - PHP - Programmation

Marsh Posté le 05-02-2009 à 21:16:17    

Bonjour,
 
pour faire un peu de crypto (SHA256), j'ai besoin de travailler le code binaire d'une chaine de caractère en PHP. (Attention je ne souhaite pas faire la chaine de caractère ne contenant que des "caractères" 0 et des 1 qui correspond, je veux travailler sur les bits)
 
exemple : //je mets des "." pour la lisibilité
ascii "maChaine"
binaire 01101101.01100001.01000011.01101000.01100001.01101001.01101110.01100101
 
je veux par exemple faire une concaténation de bits (les bits ajoutés sont spécifiques) pour avoir un multiple de 512 bits
01101101.01100001.01000011.01101000.01100001.01101001.01101110.01100101.10000000
.00000000.00000000.00000000.[ plein de bits ...].00000000.00001000
 
je veux ensuite pouvoir découper en blocs de 512 bits
 
Je souhaite aussi faire du décalage binaire a droite et a gauche (EDIT << et >> sont ces opérateurs)
 
et bien sur des opérations binaires classiques mais ça, je connais
&  ET bit-à-bit  
|  OU bit-à-bit  
^  OU exclusif  
~  Complément (NON)
 
 
 
Je n'arrive pas a trouver sur le net comment utiliser les chaines de bits en PHP j'ai juste trouvé des fonctions qui permettent d'obtenir une chaine de caractères 0 et 1 (soit 7 ou 8bits selon la fonction) correspondant à la séquence de bits 0 et 1 de la chaine initiale. (les initiés comprendront la différence)
 
 
Merci d'avance pour votre aide


Message édité par Toinou87 le 05-02-2009 à 21:46:00

---------------
Toinou87 ;-p May the force be with you!!
Reply

Marsh Posté le 05-02-2009 à 21:16:17   

Reply

Marsh Posté le 05-02-2009 à 22:55:22    

Pour faire un peu de sha256, tu peux utiliser la fonction hash [:dawa]

Code :
  1. echo hash('sha256', $myString);

Reply

Marsh Posté le 06-02-2009 à 10:07:12    

c'est malin :o
 
je pense qu'il veut faire l'algo lui meme non ?

Reply

Marsh Posté le 06-02-2009 à 10:39:53    

oui je voudrais le coder moi meme.
 
Merci de faire une réponse plus explicite ^^


---------------
Toinou87 ;-p May the force be with you!!
Reply

Marsh Posté le 06-02-2009 à 12:02:49    

A ma connaissance il n'y a pas de fonctions prévues pour ce genre de choses...et je ne vois pas vraiment quel serait l'intérêt [:joce]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 06-02-2009 à 12:57:18    

ben je t'ai donnée l'exemple : faire du cryptage.
 
La fonction existe en php donc il doit y avoir un moyen de le faire. D'ou ma demande, comme exercice j'ai envie de le faire.
 
Eventuellement, je pense pouvoir le faire avec de l'hexadécimal,
 
j'imagine qu'on peut concatener avec l'opérateur "." en hexa et la notation 0x
 
Si je fais ca, comment je peux séparer en blocs de 512 bits (64 caractères ascii mais 32 caractères hexa)


---------------
Toinou87 ;-p May the force be with you!!
Reply

Marsh Posté le 06-02-2009 à 13:19:54    

Le compilateur/exécuteur php est écrit en C, pas besoin qu'on puisse faire quelque chose en PHP pour que le compilateur/exécuteur PHP soit capable de le faire.

Message cité 1 fois
Message édité par omega2 le 06-02-2009 à 13:21:46
Reply

Marsh Posté le 06-02-2009 à 13:22:58    

PHP permet de faire des opérations sur des bits, voir http://www.php.net/manual/en/langu [...] itwise.php
Comme en langage C, il y a les opérateurs booléens qui permettent de faire toutes les manipulations que l'on veut avec des masques, et il y a les opéarateurs qui font du décalage à gauche ou à droite.
Que demander de plus ?

Reply

Marsh Posté le 06-02-2009 à 13:37:52    

omega2 a écrit :

Le compilateur/exécuteur php est écrit en C, pas besoin qu'on puisse faire quelque chose en PHP pour que le compilateur/exécuteur PHP soit capable de le faire.


 
il existe une class pour php 4 qui decrit le hashing sha256 sauf qu'elle le fait bizarrement donc je voudrais le recoder pour moi en suivant strictement l'algorithme. Ca s'appelle un exercice.
 

olivthill a écrit :

PHP permet de faire des opérations sur des bits, voir http://www.php.net/manual/en/langu [...] itwise.php
Comme en langage C, il y a les opérateurs booléens qui permettent de faire toutes les manipulations que l'on veut avec des masques, et il y a les opéarateurs qui font du décalage à gauche ou à droite.
Que demander de plus ?


ben a priori le seul truc que je vois pas trop comment faire c'est la séparation en blocs de 512 bits et la concaténation de bits.


---------------
Toinou87 ;-p May the force be with you!!
Reply

Marsh Posté le 06-02-2009 à 13:53:52    

La séparation en bloc de 512 bit peut se faire avec substr().
 
La concaténation de bits n'est pas possible car il n'existe pas de variables ne contenant qu'un seul bit.
Mais il est possible de concaténer des octets. Il faut travailler à deux niveaux, celui des octets et celui des bits à l'intérieur d'un octet en utilisant les décalages ou les masques.
 
Faire cela en PHP se fait de la même manière qu'en langage C.
 
Bien sûr, ce n'est pas facile pour quelqu'un qui n'en fait pas souvent, et c'est pour cela qu'il est recommandé d'utiliser des bouts de code déjà écrit, ou les fonctions déjà disponibles.
 
Bon courage !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed