2009-07-12 6 views
1

Je vais mettre en place un générateur de clé de licence sur mon site web mais j'ai très peu de connaissances de php! Dans mon application (Cocoa) j'ai intégré une vérification du système qui utilise la fonction RSA_sign (en C#) ... Je voudrais utiliser le système de notification IPP de paypal pour générer automatiquement et envoyer à mes utilisateurs leurs clés de licence ... mais je ne sais vraiment pas comment signer une chaîne en PHP en utilisant une clé RSA !!! En php je connais seulement la fonction openss_sign mais ce n'est pas la même chose! Ou est mieux et plus facile d'utiliser une méthode de signature DSA ???RSA_sign ou DSA_sign en PHP!

S'il vous plaît, aidez!

Merci d'avance pour toutes les réponses !!!

Répondre

0

Vous voulez openssl_sign().

EDIT:

  • Assurez-vous que le message digest est celui que vous voulez utiliser pour vérifier.
  • Ne le testez pas en comparant la sortie base64 avec une autre signature, testez-la en vérifiant la signature dans votre code C#. Je crois qu'il est possible que deux signatures valides avec la même clé des mêmes données aient des représentations binaires différentes.
+0

mais j'ai essayé de signer la même chaîne avant avec RSA_sign en C# puis avec openss_sign en PHP. ... et la représentation base64 est différente !! Si vous voulez, je poste mon code !!! –

+0

J'ai posté la sortie hexadécimale du SHA1 pour être plus objectif! Il y a une erreur? –

0

Merci beaucoup! Tu as raison!

J'ai trouvé le problème, est dans la chaîne de hachage que j'utilise avec le openssl_sign! J'ai ce code en c Objectif:

NSString *stringToEncript = @"test"; 

const char *clearText = [stringToEncript UTF8String]; 

unsigned char md[SHA_DIGEST_LENGTH]; 
SHA1((unsigned char *)clearText, strlen(clearText), md); 

for(int i=0; i<SHA_DIGEST_LENGTH; i++) 
    printf("%x", md[i]); 

et en php j'ai écrit:

$stringToEncrypt = "test"; 

$hash = sha1(utf8_encode($stringToEncrypt)); 
echo $hash; 

La sortie du premier code est:

a94a8fe5ccb19ba61c4c873d391e987982fbbd3

La sortie du deuxième code est:

a94a8fe5 ccb19ba61c4c0873d391e987982fbbd3

Comme vous pouvez le voir il y a un '0' manqué! Qu'est-ce que j'ai tort?

+0

Si vous utilisez "% 02x" comme chaîne printf, vous obtiendrez ce que vous attendez là. Je pense que je vois le problème, cependant. openssl_sign() fait le hachage SHA1 pour vous - il vous suffit de passer le $ stringToEncrypt. Si vous faites vous-même le hash, vous finirez par signer le hash-of-the-hash. – caf

+0

Ok! Donc ce que j'ai mal fait était la sortie! Mais, quand je génère la chaîne signée en encodage binaire, il existe un moyen, en php, de créer un fichier .plist dans lequel la chaîne signée est un objet NSData? Ou je dois faire un encodage base64 de la chaîne signée et ensuite le stocker comme un objet NSString dans le fichier plist? –

+0

PHP peut sortir binaire, bien sûr. Mais la sortie d'une version base64 sera probablement plus facile à analyser et plus facile à déboguer. – caf

Questions connexes