PHP Afficher Bits d'une chaine de caractère

Résolu/Fermé
Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 - 20 nov. 2009 à 12:48
Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 - 21 nov. 2009 à 14:41
Bonjour,

je voudrais avoir la valeur numérique d'une lettre dans le but d'afficher une chaine de caractère en binaire.

pour être clair je voudrais afficher


a

65

1000001

après je ne sais pas si "a" vaut 65...

comment faire ?

j'ai également une autre question,

comment utiliser le mode CBF de mcrypt?

il n'y a pas d'erreur php quand je le fait mais je retombe sur une chaine crypté

voilà ce que j'utilise :

$string = mcrypt_encrypt(MCRYPT_RIJNDAEL_256,$key,$string,MCRYPT_MODE_CFB,mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256,MCRYPT_MODE_CFB),MCRYPT_RAND));

$string = mcrypt_decrypt(MCRYPT_RIJNDAEL_256,$key,$string,MCRYPT_MODE_CFB,mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256,MCRYPT_MODE_CFB),MCRYPT_RAND));


merci d'avance !
A voir également:

8 réponses

zoby44 Messages postés 818 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 7 avril 2010 199
20 nov. 2009 à 13:54
Salut pour la première question :

<?php
$char = 'b';
$base1 = 16;	// Base hexa
$base2 = 2;		// Base binaire

// Conversion du caractere en hexa
$hex_char = bin2hex($char);

// Conversion hexa en binaire
$bin_char = base_convert($hex_char, $base1, $base2);

echo $char.' -> '.$bin_char;
?>

Par contre, ca ne fonctionne que sur un seul caractère, pour toute une chaine, il va falloir passer par une boucle for.

Pour ton problème de cryptage, pourquoi ne pas réutiliser l'exemple de php.net ?
https://www.php.net/manual/fr/function.mcrypt-decrypt.php#usernotes
<?php
$text = "The quick brown fox jumps over the lazy dog.";
$key = "haseveryletter";

$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CFB), MCRYPT_RAND);
$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CFB, $iv);

echo $encrypted; 

$good = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $encrypted, MCRYPT_MODE_CFB, $iv);
echo $good'; // The quick brown fox jumps over the lazy dog
?>
1
Pilow Messages postés 400 Date d'inscription vendredi 2 octobre 2009 Statut Membre Dernière intervention 23 décembre 2009 71
20 nov. 2009 à 13:56
Ca ca marche apres test :

<?php
$chaine = 'TAta';
for ($temp = 0; $temp<strlen($chaine); $temp++)
{
	$caractere = ord($chaine{$temp});
	echo $chaine{$temp} . ' correspond a : ' . $caractere . ' et en binbin : ';
	for ($test = 128; $test >= 1; $test /= 2)
		echo (($caractere & $test) ? '1' : '0');
	echo '<br />';
}
?>


PS : J'obtiens :
T correspond a : 84 et en binbin : 01010100
A correspond a : 65 et en binbin : 01000001
t correspond a : 116 et en binbin : 01110100
a correspond a : 97 et en binbin : 01100001
1
Pilow Messages postés 400 Date d'inscription vendredi 2 octobre 2009 Statut Membre Dernière intervention 23 décembre 2009 71
20 nov. 2009 à 13:33
Bonjour,

Je ne sais pas si c'est utilisable en PHP mais cela marche en C, tu peux comparer ton caractère avec des masque binaire:
binaire / decimal
1 = 1
10 = 2
100 = 4
1000 = 8
10000 = 16
100000 = 32
1000000 = 64
10000000 = 128

Donc tu fais :


for ($test = 128, $test >= 1; $test = $test / 2)
echo ($toncaractere & $test ? 1 : 0);



je test ca et je reviens ^^
0
Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 274
20 nov. 2009 à 14:38
Merci beaucoup !

Le problème de cryptage est résolu, je n'utilisé pas le même IV au cryptage qu'au décryptage et vu qu'en mode OFB l'iv peut être public j'ai fait une classe avec un iv définit pour chaque cipher...

je m'étais déjà basé sur l'exemple de php.net mais je n'avais pas capté ce détail...

pour ce qui est d'afficher les lettres en binaire c'est justement comme en C que je voulais faire,
récupérer même en base 10 la valeur de la lettre stocké dans la ram

le problème étant surtout de savoir quelle valeur analyse l'algorithme de cryptage (ou de chiffrement)
dans le but de faire un générateur de clef et de mot de passe.

Je crois que je suis parti dans une mauvaise direction et qu'il vaut mieux que je fasse 2 fonctions différentes pour les clefs et les mots de passe, et faire les clefs directement en binaire...

vous m'avez également appris un truc $chaine{$nbChar} je ne connaissais pas ! j'utilisais str_split et j'avais refais une fonction à la con pour les version de php 4...

Une dernière question et le post sera résolu :

si j'ai bien compris ord et bin2hex reviennent au même pour ce problème et la valeur ASCII est la valeur stocké dans la ram?

encore merci !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Pilow Messages postés 400 Date d'inscription vendredi 2 octobre 2009 Statut Membre Dernière intervention 23 décembre 2009 71
20 nov. 2009 à 14:41
http://www.manuelphp.com/php/function.ord.php

ORD();
Retourn le code ASCII du caractère entré en parametre.

Pour ce qui est de bin2hex j'avoue ne pas connaitre.

Et ascii :
L'ASCII définit 128 caractères numérotés de 0 à 127 et codés en binaire de 0000000 à 1111111.ASCII contient les caractères nécessaires pour écrire en anglais.
Les caractères de numéro 0 à 31 et le 127 ne sont pas affichables ; ils correspondent à des commandes de contrôle de terminal informatique. Le caractère numéro 32 est l'espace. Les autres caractères sont les chiffres arabes, les lettres latines majuscules et minuscules et quelques symboles de ponctuation.


Heureux d'avoir pu t'aider ;)
0
Pilow Messages postés 400 Date d'inscription vendredi 2 octobre 2009 Statut Membre Dernière intervention 23 décembre 2009 71
20 nov. 2009 à 15:11
Pour le bin2hex :
https://www.php.net/manual/fr/function.bin2hex.php
Description
string bin2hex ( string $str )

Retourne la chaîne str dont tous les caractères sont représentés par leur équivalent hexadécimal. La chaîne retournée est une chaîne ASCII. La conversion supporte les caractères binaires, et utilise les bits de poids forts en premier. 
0
Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 274
20 nov. 2009 à 15:13
je connais la table ascii mais en fait je crois que je m'égare, je cherche la complication là ou il n'y en a pas...

merci encore !
0
Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 274
21 nov. 2009 à 14:41
j'ai fais comme ça tout compte fais :

function generKey($nbOctet) {
	/*
		Génère une clef de cryptage aléatoire du nombre d'octet indiqué

		1 --- $nbOctet -> Int : Nombre d'octet que doit contenir la clef

	*/
		$nbOctet *=8;
		$key = '';
		for($i=0;$i<$nbOctet;$i++) $key .= mt_rand(0,1);
		$key = str_split($key,8);
		$keyt = '';
		foreach($key as $oct) $keyt .= sprintf('%c',$oct);
		return $keyt;
	}
0