Chiffrement d'un mot de passe

CeetixCeetix Membre
avril 2012 modifié dans API UIKit #1
J'aimerai qu'un user puisse entrer un password pour une application. Ce password serait juste interne à  l'application. Je veux quand même le chiffrer et le sauvegarder dans les userDefaults.

J'ai regardé sur le net et il y a une méthode de chiffrement sh1 :


<br />
<br />
-(NSString*) sha1:(NSString*)input<br />
{<br />
const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding];<br />
NSData *data = [NSData dataWithBytes:cstr length:input.length];<br />
<br />
uint8_t digest[CC_SHA1_DIGEST_LENGTH];<br />
<br />
CC_SHA1(data.bytes, data.length, digest);<br />
<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 />
<br />
}<br />




Je me demandais si c'était la bonne méthode, si Apple ne fournissait pas un truc plus direct et si lors de la soumission à  l'App Store je devais préciser que j'utilise du chiffrement ?
Mots clés:

Réponses

  • Bon pour commencer par couper l'herbe sous le pied de Yoann, en français on dit chiffrer et pas crypter. image/tongue.png' class='bbc_emoticon' alt=':P' />



    Ensuite, pour stocker le password tu as le keychain à  la place des userDefaults. À voir comment le keychain sécurise les données mais t'auras ptet meme pas besoin de chiffrer le password.
  • Merde je peux pas changer le titre. Mais je le disais en anglais ^^





    Ok je vais matter le keychain alors. Merci (si d'autres ont des précisions concernant le chiffrement dans le keychain si besoin ...)
  • AliGatorAliGator Membre, Modérateur
    Mais sinon pour répondre à  ta question initiale, oui c'est la bonne méthode, et... bah Apple fournit déjà  un truc direct pour faire ça, tu l'as sous les yeux, c'est la librairie CommonCrypto (librairie C)



    La seule ligne intéressante qui fait la vraie crypto dans la fonction que tu as cité, c'est la ligne CC_SHA1(data.bytes, data.length, digest);.



    Le reste, c'est de l'enrobage :

    - la fonction ayant besoin d'un buffer C, on passe par NSData parce que c'est plus pratique pour nous quand on manipule du Cocoa. C'est les 3 lignes d'avant

    - La fonction remplit un buffer C, or nous on veut un NSData... voire dans le cas de ta fonction la représentation hexadécimale de ce NSData. C'est les 3 lignes d'après.



    Mais sinon Apple nous fournit bien la fonction au coeur du chiffrement SHA1, le principal. Toi tu veux pouvoir manipuler des NSString en entrée et en sortie donc tu utilises la fonction que tu as citée, mais si tu avais des buffers C, ou voulait en sortie un NSData, bah tu enroberais autrement.

    (Et moi d'ailleurs perso plutôt que de faire une fonction avec le prototype que tu as cité dans ton code plus haut, j'aurais fait une catégorie de NSString, mais bon, ça revient un peu au même)
  • http://stackoverflow.com/questions/3468268/objective-c-sha1



    Un petit lien pour ceux que sa intéresserait image/wink.png' class='bbc_emoticon' alt=';)' />

    Bon faut checker si c'est en little/big endian par contre.



    Sinon pourquoi chiffrer les mots de passe dans une application ? C'est un système assez fermer, non ? ...
  • Pour enregistrer un mot de passe, utilisez le keychain, pas un truc perso, ça sera plus simple et beaucoup plus sécurisé.





    @Xodia, par ce qu'un memory dump ou un disk dump reste tout à  fait faisable, donc quand on cherche à  sécuriser quelque chose avec un mot de passe, on le fait bien tant qu'à  faire :-)
  • zoczoc Membre
    Accessoirement, SHA-1 n'est pas un algorithme de chiffrement, mais un algorithme de hachage, c'est à  dire qu'il est impossible de retrouver (déchiffrer) les données initiales à  partir du hash SHA-1.
  • 'zoc' a écrit:


    Accessoirement, SHA-1 n'est pas un algorithme de chiffrement, mais un algorithme de hachage, c'est à  dire qu'il est impossible de retrouver (déchiffrer) les données initiales à  partir du hash SHA-1.




    Ce qui est plutôt une bonne chose dans une sauvegarde de mot de passe :-)
  • Tout est plus clair merci image/smile.png' class='bbc_emoticon' alt=':)' /> Et donc j'ai quand même besoin de hacher le pwd ?
  • 'Ceetix' a écrit:


    Tout est plus clair merci image/smile.png' class='bbc_emoticon' alt=':)' /> Et donc j'ai quand même besoin de hacher le pwd ?




    Tout dépend ce que tu cherche à  faire.



    En soit, le stocker dans le Keychain va faire pour toi le chiffrement et tu récupèrera en mémoire le mot de passe en clair lorsque tu en aura besoin.



    Pour autant, si tu n'as pas besoin d'avoir se mot de passe en clair (ce qui est le cas ici, vu qu'il n'est pas envoyé à  d'autres services) il est préférable de ne stocker qu'un hash pour éviter une exposition inutile.
Connectez-vous ou Inscrivez-vous pour répondre.