Securité des services

al33eral33er Membre
12:21 modifié dans API AppKit #1
Bonjour,

On me demande de créer une signature en SHA1 à  partir de deux variables texte. Est-ce difficile, ou puis-je trouver de l'info dessus. Il y a un projet dans la doc apple mais ce n'est pas très simple ?

Alexandre.

Réponses

  • AliGatorAliGator Membre, Modérateur
    12:21 modifié #2
    Ce que tu cherches ne s'appelle pas de la sécurité mais de la cryptographie (beaucoup confondent les deux, moi y compris parfois) ou plus exactement du chiffrement.

    Tu as tout un guide là  dessus sur la doc Apple en particulier sur la crypto.

    Par exemple sur iOS tu as la librairie CommonCrypto qui est bas niveau et te permet de faire cela, et tu as CFNetwork et tout ce qui est basé sur les échanges réseau qui l'utilise et t'expose également des algos de chiffrement pour les échanges réseau.

    Sous MacOSX, qui est la plateforme qui semble t'intéresser, je ne sais plus si c'est pareil, mais tout doit être expliqué dans la doc je pense. A priori cela passe par OpenSSL (Peut-être par là , tiens on retrouve CommonCrypto, ou peut-être qu'il y a plus haut niveau je n'ai pas testé). Il existe également très certainement des catégories de NSString traà®nant sur le net permettant de faire ça en une ligne de code Objective-C plus sympatique à  manipuler que du C (il existe bien des catégories pour Base64 & co je vois bien une catégorie pour SHA1 aussi ça doit exister, GIYF)
  • al33eral33er Membre
    12:21 modifié #3
    Merci Ali,

    Grace à  toi j'ai trouvé cela. Il faut maintenant que je compare avec ce que fait PHP.


    #import <CommonCrypto/CommonDigest.h>
    #import <CommonCrypto/CommonCryptor.h>


    +(NSString*) digest:(NSString*)input
    {
    const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding];
    NSData *data = [NSData dataWithBytes:cstr length:input.length];

    uint8_t digest[CC_SHA1_DIGEST_LENGTH];

    CC_SHA1(data.bytes, data.length, digest);

    NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];

    for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++)
    [output appendFormat:@%02x, digest];

    return output;

    }
  • al33eral33er Membre
    mars 2011 modifié #4
    Bon voilà ,

    Le code que j'ai mis retourne bien un hexa sur 20 positions mais ce n'est pas la même chose que retourne la fonction sha1() de php.


    J'ai meme essayé avec cela  :
    <br />	NSData *data = [input dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];<br />	uint8_t digest[CC_SHA1_DIGEST_LENGTH];<br />	CC_SHA1(data.bytes, data.length, digest);<br />	NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];<br />	<br />	for(int i = 0; i &lt; CC_SHA1_DIGEST_LENGTH; i++)<br />		[output appendFormat:@&quot;%02x&quot;, digest[i]];<br />	<br />	return output;<br />
    

    Comprends pas. Si vous avez une idée.


    Alexandre.
  • 12:21 modifié #5
    Disons que la cryptographie (la science) ou chiffrement est un contrôle permettant de renforcir la sécurité car elle permet d'assurer la confidentialité des information....

  • hmakshmaks Membre
    12:21 modifié #6
    @Ali SHA1 n'est pas un algo de chiffrement. mais de hashage c'est quand même bien différent même si on utilise parfois des hash en cryptographie.

    @al33er j'utilise cette fonction qui me retourne la même chose que SHA1 PHP.

    <br />+ (NSString *)sha1Hash:(NSString *)stringToHash<br />{<br />	NSString *result = nil;<br />	<br />	if(stringToHash) {<br />		unsigned char digest[20];<br />		NSData *data = [stringToHash dataUsingEncoding:NSASCIIStringEncoding];<br />		CC_SHA1([data bytes], [data length], digest); <br />		result = [NSString stringWithFormat: @&quot;%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x&quot;,<br />				&nbsp; digest[0], digest[1],<br />				&nbsp; digest[2], digest[3],<br />				&nbsp; digest[4], digest[5],<br />				&nbsp; digest[6], digest[7],<br />				&nbsp; digest[8], digest[9],<br />				&nbsp; digest[10], digest[11],<br />				&nbsp; digest[12], digest[13],<br />				&nbsp; digest[14], digest[15],<br />				&nbsp; digest[16], digest[17],<br />				&nbsp; digest[18], digest[19]];<br />		result = [result uppercaseString];<br />	}<br />	return result;	<br />}
    

  • AliGatorAliGator Membre, Modérateur
    12:21 modifié #7
    dans 1299581350:

    @Ali SHA1 n'est pas un algo de chiffrement. mais de hashage c'est quand même bien différent même si on utilise parfois des hash en cryptographie.
    Quand je disais que même moi il m'arrive de confondre les deux :P
    Merci de cette correction ;)
Connectez-vous ou Inscrivez-vous pour répondre.