Chiffrement d'un mot de passe
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 :
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 ?
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 < CC_SHA1_DIGEST_LENGTH; i++)<br />
[output appendFormat:@"%02x", 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:
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
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.
Ok je vais matter le keychain alors. Merci (si d'autres ont des précisions concernant le chiffrement dans le keychain si besoin ...)
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)
Un petit lien pour ceux que sa intéresserait /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 ? ...
@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 :-)
Ce qui est plutôt une bonne chose dans une sauvegarde de mot de passe :-)
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.